ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggZjYwNWU1Ny4uODg3ZDY0YiAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTcsNyArNyw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNjIzLDYgKzYyMywxMTggQEAKICNkZWZpbmUgSEFMX0hSVElNX0V4dGVybmFsRXZlbnRDb3VudGVyRGlzYWJsZSAgIEhBTF9IUlRJTV9FeHRFdmVudENvdW50ZXJEaXNhYmxlCiAjZGVmaW5lIEhBTF9IUlRJTV9FeHRlcm5hbEV2ZW50Q291bnRlclJlc2V0ICAgICBIQUxfSFJUSU1fRXh0RXZlbnRDb3VudGVyUmVzZXQKICNlbmRpZiAvKiBTVE0zMkc0ICovCisKKyNpZiBkZWZpbmVkKFNUTTMySDcpCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVYxX1RJTUJDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVYyX1RJTUJDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVYzX1RJTUNDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY0X1RJTUNDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY1X1RJTURDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY2X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY3X1RJTUVDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY4X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1BRVY5X1RJTUZDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVYxX1RJTUFDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVYyX1RJTUFDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVYzX1RJTUNDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY0X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY1X1RJTURDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY2X1RJTURDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY3X1RJTUVDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY4X1RJTUVDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1CRVY5X1RJTUZDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVYxX1RJTUFDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVYyX1RJTUFDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVYzX1RJTUJDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY0X1RJTUJDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY1X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY2X1RJTURDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY3X1RJTUVDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY4X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DRVY5X1RJTUZDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVYxX1RJTUFDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVYyX1RJTUFDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVYzX1RJTUJDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY0X1RJTUJDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY1X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY2X1RJTUVDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY3X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY4X1RJTUZDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1ERVY5X1RJTUZDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVYxX1RJTUFDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVYyX1RJTUJDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVYzX1RJTUJDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY0X1RJTUNDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY1X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY2X1RJTURDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY3X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY4X1RJTUZDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1FRVY5X1RJTUZDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl85CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVYxX1RJTUFDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl8xCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVYyX1RJTUJDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVYzX1RJTUJDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8zCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY0X1RJTUNDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl80CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY1X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY2X1RJTURDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl82CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY3X1RJTURDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl83CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY4X1RJTUVDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1GRVY5X1RJTUVDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl85CisKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWMV9USU1CQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVYyX1RJTUJDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUFFVjNfVElNQ0NNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWNF9USU1DQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVY1X1RJTURDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUFFVjZfVElNRENNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWN19USU1FQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVY4X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUFFVjlfVElNRkNNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQkVWMV9USU1BQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1CRVYyX1RJTUFDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUJFVjNfVElNQ0NNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQkVWNF9USU1DQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1CRVY1X1RJTURDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUJFVjZfVElNRENNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQkVWN19USU1FQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1CRVY4X1RJTUVDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUJFVjlfVElNRkNNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWMV9USU1BQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DRVYyX1RJTUFDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNFVjNfVElNQkNNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWNF9USU1CQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DRVY1X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNFVjZfVElNRENNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQ0VWN19USU1FQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DRVY4X1RJTUVDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNFVjlfVElNRkNNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNREVWMV9USU1BQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1ERVYyX1RJTUFDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTURFVjNfVElNQkNNUDIgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNREVWNF9USU1CQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1ERVY1X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTURFVjZfVElNRUNNUDEgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNREVWN19USU1FQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1ERVY4X1RJTUZDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTURFVjlfVElNRkNNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRUVWMV9USU1BQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FRVYyX1RJTUJDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjNfVElNQkNNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRUVWNF9USU1DQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FRVY1X1RJTURDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjZfVElNRENNUDEgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRUVWN19USU1EQ01QMiBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1FRVY4X1RJTUZDTVAzIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUVFVjlfVElNRkNNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRkVWMV9USU1BQ01QMyBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMQorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1GRVYyX1RJTUJDTVAxIEhSVElNX09VVFBVVFNFVF9USU1FVl8yCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUZFVjNfVElNQkNNUDQgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRkVWNF9USU1DQ01QMSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNAorI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1GRVY1X1RJTUNDTVA0IEhSVElNX09VVFBVVFNFVF9USU1FVl81CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUZFVjZfVElNRENNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYKKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRkVWN19USU1EQ01QNCBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1GRVY4X1RJTUVDTVAyIEhSVElNX09VVFBVVFNFVF9USU1FVl84CisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUZFVjlfVElNRUNNUDMgSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkKKyNlbmRpZiAvKiBTVE0zMkg3ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTI5Nyw3ICsxNDA5LDcgQEAKIAogI2RlZmluZSBIQUxfSTJDRmFzdE1vZGVQbHVzQ29uZmlnKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMsIGNtZCkgKCgoY21kKT09RU5BQkxFKT8gSEFMX0kyQ0V4X0VuYWJsZUZhc3RNb2RlUGx1cyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzKTogSEFMX0kyQ0V4X0Rpc2FibGVGYXN0TW9kZVBsdXMoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cykpCiAKLSNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRzQpCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfVHJhbnNtaXRfSVQgIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVAogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1JlY2VpdmVfSVQgICBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9JVAogI2RlZmluZSBIQUxfSTJDX1NsYXZlX1NlcXVlbnRpYWxfVHJhbnNtaXRfSVQgICBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9JVApAQCAtMzEzMCw3ICszMjQyLDcgQEAKIC8qKiBAZGVmZ3JvdXAgSEFMX1JUQ19BbGlhc2VkX01hY3JvcyBIQUwgUlRDIEFsaWFzZWQgTWFjcm9zIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkIChTVE0zMkcwKSB8fCBkZWZpbmVkIChTVE0zMkw0MTJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDIyeHgpIHx8IGRlZmluZWQgKFNUTTMyRzQpCisjaWYgZGVmaW5lZCAoU1RNMzJHMCkgfHwgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQgKFNUTTMyRzQpCiAjZWxzZQogI2RlZmluZSBfX0hBTF9SVENfQ0xFQVJfRkxBRyAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9SVENfRVhUSV9DTEVBUl9GTEFHCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luYy9zdG0zMl9hc3NlcnRfdGVtcGxhdGUuaCBiL0luYy9zdG0zMl9hc3NlcnRfdGVtcGxhdGUuaAppbmRleCAyOGNmYzM2Li4xNWMxMmYxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJfYXNzZXJ0X3RlbXBsYXRlLmgKKysrIGIvSW5jL3N0bTMyX2Fzc2VydF90ZW1wbGF0ZS5oCkBAIC04LDcgKzgsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsLmggYi9JbmMvc3RtMzJnNHh4X2hhbC5oCmluZGV4IDZlYTE0NGUuLmZjZmY3MDkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWwuaApAQCAtNyw3ICs3LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9hZGMuaCBiL0luYy9zdG0zMmc0eHhfaGFsX2FkYy5oCmluZGV4IGYzMDFkMDEuLmQwZTQ4MTcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2FkYy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2FkYy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTEwMDYsNyArMTAwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX0hSVElNX1RSRzQpICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX0VYVF9JVDIpKSkgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfU09GVFdBUkVfU1RBUlQpICAgICAgICAgICApCi0jZWxpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2VsaWYgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICNkZWZpbmUgSVNfQURDX0VYVFRSSUcoX19IQU5ETEVfXywgX19SRUdUUklHX18pICgoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QxX1RSR08pICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDFfVFJHTzIpICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UMV9DQzMpICAgICAgICAgIHx8IFwKQEAgLTEwMzksNyArMTAzOSwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UOF9DQzEpICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19FWFRfSVQyKSkpICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX1NPRlRXQVJFX1NUQVJUKSAgICAgICAgICAgKQotI2VsaWYgZGVmaW5lZChTVE0zMkdCSzFDQikgfHwgZGVmaW5lZChTVE0zMkc0MzF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NDF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzF4eCkKKyNlbGlmIGRlZmluZWQoU1RNMzJHNDcxeHgpCisjZGVmaW5lIElTX0FEQ19FWFRUUklHKF9fSEFORExFX18sIF9fUkVHVFJJR19fKSAoKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UMV9UUkdPKSAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QxX1RSR08yKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDFfQ0MzKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UMl9UUkdPKSAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QzX1RSR08pICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDRfVFJHTykgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UNl9UUkdPKSAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1Q3X1RSR08pICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDhfVFJHTykgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UOF9UUkdPMikgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QxNV9UUkdPKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfTFBUSU1fT1VUKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBBREMxKSB8fCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBBREMyKSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UMV9DQzEpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDFfQ0MyKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QyX0NDMikgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UM19DQzQpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDRfQ0M0KSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX0VYVF9JVDExKSkpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlID09IEFEQzMpKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QyX0NDMSkgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QyX0NDMykgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QzX0NDMSkgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1Q0X0NDMSkgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1Q4X0NDMSkgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX0VYVF9JVDIpKSkgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfU09GVFdBUkVfU1RBUlQpICAgICAgICAgICApCisjZWxpZiBkZWZpbmVkKFNUTTMyR0JLMUNCKSB8fCBkZWZpbmVkKFNUTTMyRzQzMXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ0MXh4KQogI2RlZmluZSBJU19BRENfRVhUVFJJRyhfX0hBTkRMRV9fLCBfX1JFR1RSSUdfXykgKCgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDFfVFJHTykgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UMV9UUkdPMikgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QxX0NDMSkgICAgICAgICAgfHwgXApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfYWRjX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9hZGNfZXguaAppbmRleCA4NTE4YjNlLi42OGUzMWJlIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9hZGNfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9hZGNfZXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC00NjQsNyArNDY0LDcgQEAKICAgKiBAbm90ZSAgV2hlbiBtdWx0aW1vZGUgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgbWFjcm8gYWx3YXlzIHJldHVybnMgU0VULgogICAqIEByZXR2YWwgU0VUIChBREMgaXMgaW5kZXBlbmRlbnQpIG9yIFJFU0VUIChBREMgaXMgbm90KS4KICAgKi8KLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAjZGVmaW5lIEFEQ19JU19JTkRFUEVOREVOVChfX0hBTkRMRV9fKSAgICBcCiAgICggKCAoICgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREM1KSBcCiAgICAgKT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC02MDcsNyArNjA3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0NSX0RVQUwpCiAjZW5kaWYgLyogQURDX01VTFRJTU9ERV9TVVBQT1JUICovCiAKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAvKioKICAgKiBAYnJpZWYgU2V0IGhhbmRsZSBpbnN0YW5jZSBvZiB0aGUgQURDIHNsYXZlIGFzc29jaWF0ZWQgdG8gdGhlIEFEQyBtYXN0ZXIuCiAgICogQHBhcmFtIF9fSEFORExFX01BU1RFUl9fIEFEQyBtYXN0ZXIgaGFuZGxlLgpAQCAtNjQ2LDcgKzY0Niw3IEBACiAgICogQHBhcmFtIF9fSEFORExFX18gQURDIGhhbmRsZS4KICAgKiBAcmV0dmFsIFNFVCAoQURDIGluc3RhbmNlIGlzIHZhbGlkKSBvciBSRVNFVCAoQURDIGluc3RhbmNlIGlzIGludmFsaWQpCiAgICovCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogI2RlZmluZSBBRENfVEVNUEVSQVRVUkVfU0VOU09SX0lOU1RBTkNFKF9fSEFORExFX18pICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMxKSB8fCAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzUpKQogI2VsaWYgZGVmaW5lZChTVE0zMkdCSzFDQikgfHwgZGVmaW5lZChTVE0zMkc0MzF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NDF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzF4eCkKICNkZWZpbmUgQURDX1RFTVBFUkFUVVJFX1NFTlNPUl9JTlNUQU5DRShfX0hBTkRMRV9fKSAgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMxKQpAQCAtNjU3LDcgKzY1Nyw3IEBACiAgICogQHBhcmFtIF9fSEFORExFX18gQURDIGhhbmRsZS4KICAgKiBAcmV0dmFsIFNFVCAoQURDIGluc3RhbmNlIGlzIHZhbGlkKSBvciBSRVNFVCAoQURDIGluc3RhbmNlIGlzIGludmFsaWQpCiAgICovCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogI2RlZmluZSBBRENfQkFUVEVSWV9WT0xUQUdFX0lOU1RBTkNFKF9fSEFORExFX18pICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSAhPSBBREMyKSB8fCAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpICE9IEFEQzQpKQogI2VsaWYgZGVmaW5lZChTVE0zMkdCSzFDQikgfHwgZGVmaW5lZChTVE0zMkc0MzF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NDF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzF4eCkKICNkZWZpbmUgQURDX0JBVFRFUllfVk9MVEFHRV9JTlNUQU5DRShfX0hBTkRMRV9fKSAgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSAhPSBBREMyKQpAQCAtNjkxLDcgKzY5MSw3IEBACiAgICogQHBhcmFtIF9fQ0hBTk5FTF9fIHByb2dyYW1tZWQgQURDIGNoYW5uZWwuCiAgICogQHJldHZhbCBTRVQgKF9fQ0hBTk5FTF9fIGlzIHZhbGlkKSBvciBSRVNFVCAoX19DSEFOTkVMX18gaXMgaW52YWxpZCkKICAgKi8KLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAjZGVmaW5lIElTX0FEQ19DSEFOTkVMKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSAgKCAgICAgICggKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMSkgICAgICAgICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF82KSAgICAgICAgICAgICAgICB8fCBcCkBAIC03NDMsNyArNzQzLDM3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTYpICAgICAgICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZCQVQpICAgICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WUkVGSU5UKSkpKQotI2VsaWYgZGVmaW5lZChTVE0zMkdCSzFDQikgfHwgZGVmaW5lZChTVE0zMkc0MzF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NDF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzF4eCkKKyNlbGlmIGRlZmluZWQoU1RNMzJHNDcxeHgpCisjZGVmaW5lIElTX0FEQ19DSEFOTkVMKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSAgKCAgICAgICggKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMSkgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzIpICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8zKSAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNCkgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzUpICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF82KSAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNykgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzgpICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF85KSAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTApICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzExKSAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMikgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTQpICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE1KSkgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMSkgICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WT1BBTVAxKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVEVNUFNFTlNPUl9BREMxKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZCQVQpICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF9WUkVGSU5UKSkpICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzIpICAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTMpICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZPUEFNUDIpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNykgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVk9QQU1QM19BREMyKSkpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMzKSAgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZPUEFNUDNfQURDMykgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNikgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfVkJBVCkgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMX1ZSRUZJTlQpKSkpCisjZWxpZiBkZWZpbmVkKFNUTTMyR0JLMUNCKSB8fCBkZWZpbmVkKFNUTTMyRzQzMXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ0MXh4KQogI2RlZmluZSBJU19BRENfQ0hBTk5FTChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXykgICggICAgICAoICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgICAgICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8yKSAgICAgICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMykgICAgICAgICAgICAgICAgfHwgXApAQCAtNzc2LDcgKzgwNiw3IEBACiAgICogQHBhcmFtIF9fQ0hBTk5FTF9fIHByb2dyYW1tZWQgQURDIGNoYW5uZWwuCiAgICogQHJldHZhbCBTRVQgKF9fQ0hBTk5FTF9fIGlzIHZhbGlkKSBvciBSRVNFVCAoX19DSEFOTkVMX18gaXMgaW52YWxpZCkKICAgKi8KLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAjZGVmaW5lIElTX0FEQ19ESUZGX0NIQU5ORUwoX19IQU5ETEVfXywgX19DSEFOTkVMX18pICAoICggKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMSkgICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF82KSAgICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzcpICAgICAgICAgICB8fCBcCkBAIC04MTUsNyArODQ1LDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTIpICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xMykgICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzE1KSkpICkKLSNlbGlmIGRlZmluZWQoU1RNMzJHQksxQ0IpIHx8IGRlZmluZWQoU1RNMzJHNDMxeHgpIHx8IGRlZmluZWQoU1RNMzJHNDQxeHgpIHx8IGRlZmluZWQoU1RNMzJHNDcxeHgpCisjZWxpZiBkZWZpbmVkKFNUTTMyRzQ3MXh4KQorI2RlZmluZSBJU19BRENfRElGRl9DSEFOTkVMKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSAgKCAoICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMikgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8zKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzQpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfNSkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF82KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzcpICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfOCkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF85KSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEwKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTEpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNCkpICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMyKSAgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEyKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMTMpKSkgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkgPT0gQURDMykgICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8xNSkpKSApCisjZWxpZiBkZWZpbmVkKFNUTTMyR0JLMUNCKSB8fCBkZWZpbmVkKFNUTTMyRzQzMXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ0MXh4KQogI2RlZmluZSBJU19BRENfRElGRl9DSEFOTkVMKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSAgKCAoICgoX19DSEFOTkVMX18pID09IEFEQ19DSEFOTkVMXzEpICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gQURDX0NIQU5ORUxfMikgICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBBRENfQ0hBTk5FTF8zKSAgICAgICAgICAgfHwgXApAQCAtOTE4LDcgKzk2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fSU5KVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHSU5KRUNfSFJUSU1fVFJHMykgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX0VYVF9JVDMpKSkgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19JTkpUUklHX18pID09IEFEQ19JTkpFQ1RFRF9TT0ZUV0FSRV9TVEFSVCkgICAgICAgICAgKQotI2VsaWYgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNlbGlmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAjZGVmaW5lIElTX0FEQ19FWFRUUklHSU5KRUMoX19IQU5ETEVfXywgX19JTkpUUklHX18pICAoKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QxX1RSR08pICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QxX1RSR08yKSAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QxX0NDNCkgICAgICAgICB8fCBcCkBAIC05NTAsNyArOTk4LDM1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fSU5KVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHSU5KRUNfVDIwX0NDMikgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX0VYVF9JVDMpKSkgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19JTkpUUklHX18pID09IEFEQ19JTkpFQ1RFRF9TT0ZUV0FSRV9TVEFSVCkgICAgICAgICAgKQotI2VsaWYgZGVmaW5lZChTVE0zMkdCSzFDQikgfHwgZGVmaW5lZChTVE0zMkc0MzF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NDF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzF4eCkKKyNlbGlmIGRlZmluZWQoU1RNMzJHNDcxeHgpCisjZGVmaW5lIElTX0FEQ19FWFRUUklHSU5KRUMoX19IQU5ETEVfXywgX19JTkpUUklHX18pICAoKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QxX1RSR08pICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QxX1RSR08yKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QxX0NDNCkgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QyX1RSR08pICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QzX1RSR08pICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1Q0X1RSR08pICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1Q2X1RSR08pICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1Q3X1RSR08pICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1Q4X1RSR08pICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1Q4X1RSR08yKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1Q4X0NDNCkgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QxNV9UUkdPKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX0xQVElNX09VVCkgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBBREMxKSB8fCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBBREMyKSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QyX0NDMSkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QzX0NDMSkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QzX0NDMykgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QzX0NDNCkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1QxNl9DQzEpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19JTkpUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdJTkpFQ19FWFRfSVQxNSkpKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlID09IEFEQzMpKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fSU5KVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHSU5KRUNfVDFfQ0MzKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX1Q0X0NDMykgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19JTkpUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdJTkpFQ19UNF9DQzQpICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fSU5KVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHSU5KRUNfVDhfQ0MyKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOSlRSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDX0VYVF9JVDMpKSkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19JTkpUUklHX18pID09IEFEQ19JTkpFQ1RFRF9TT0ZUV0FSRV9TVEFSVCkgICAgICAgICAgKQorI2VsaWYgZGVmaW5lZChTVE0zMkdCSzFDQikgfHwgZGVmaW5lZChTVE0zMkc0MzF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NDF4eCkKICNkZWZpbmUgSVNfQURDX0VYVFRSSUdJTkpFQyhfX0hBTkRMRV9fLCBfX0lOSlRSSUdfXykgICgoKF9fSU5KVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHSU5KRUNfVDFfVFJHTykgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fSU5KVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHSU5KRUNfVDFfVFJHTzIpICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fSU5KVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHSU5KRUNfVDFfQ0M0KSAgICAgICAgIHx8IFwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX2NvbXAuaCBiL0luYy9zdG0zMmc0eHhfaGFsX2NvbXAuaAppbmRleCA3NjJmZjNkLi43MDc5NmJjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9jb21wLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfY29tcC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTY3LDkgKzY3LDYgQEAKICAgdWludDMyX3QgVHJpZ2dlck1vZGU7ICAgICAgICAvKiE8IFNldCB0aGUgY29tcGFyYXRvciBvdXRwdXQgdHJpZ2dlcmluZyBFeHRlcm5hbCBJbnRlcnJ1cHQgTGluZSAoRVhUSSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENPTVBfRVhUSV9UcmlnZ2VyTW9kZSAqLwogCi0gIHVpbnQzMl90IERlZ2xpdGNoZXJNb2RlOyAgICAgLyohPCBTZXQgY29tcGFyYXRvciBkZWdsaXRjaGVyIG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENPTVBfRGVnbGl0Y2hlck1vZGUgKi8KLQogfSBDT01QX0luaXRUeXBlRGVmOwogCiAvKioKQEAgLTI3MiwxNSArMjY5LDYgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIENPTVBfRGVnbGl0Y2hlck1vZGUgQ09NUCBkZWdsaXRjaGVyIG1vZGUKLSAgKiBAewotICAqLwotI2RlZmluZSBDT01QX0RFR0xJVENIRVJfRElTQUJMRUQgICAgICAgICgweDAwMDAwMDAwVUwpICAgICAgICAgICAgLyohPCBDb21wYXJhdG9yIGRlZ2xpdGNoZXIgZGlzYWJsZWQgKi8KLSNkZWZpbmUgQ09NUF9ERUdMSVRDSEVSX0VOQUJMRUQgICAgICAgICAoQ09NUF9DU1JfREVHTElUQ0hFTikgICAgIC8qITwgQ29tcGFyYXRvciBkZWdsaXRjaGVyIGVuYWJsZWQgKi8KLS8qKgotICAqIEB9Ci0gICovCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC02OTEsNyArNjc5LDcgQEAKICAgKi8KICNkZWZpbmUgX19IQUxfQ09NUF9DT01QNF9FWFRJX0NMRUFSX0ZMQUcoKSAgICAgICAgICAgIExMX0VYVElfQ2xlYXJGbGFnXzBfMzEoQ09NUF9FWFRJX0xJTkVfQ09NUDQpCiAKLSNpZiAgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiAgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBDT01QNSBFWFRJIGxpbmUgcmlzaW5nIGVkZ2UgdHJpZ2dlci4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTc3Niw4ICs3NjQsOCBAQAogICAqLwogI2RlZmluZSBfX0hBTF9DT01QX0NPTVA1X0VYVElfQ0xFQVJfRkxBRygpICAgICAgICAgICAgTExfRVhUSV9DbGVhckZsYWdfMF8zMShDT01QX0VYVElfTElORV9DT01QNSkKIAotI2VuZGlmIC8qIFNUTTMyRzQ3NHh4IHx8IFNUTTMyRzQ4NHh4IHx8IFNUTTMyRzQ3M3h4ICovCi0jaWYgIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjZW5kaWYgLyogU1RNMzJHNDc0eHggfHwgU1RNMzJHNDg0eHggfHwgU1RNMzJHNDczeHggfHwgU1RNMzJHNDgzeHgqLworI2lmICBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIENPTVA2IEVYVEkgbGluZSByaXNpbmcgZWRnZSB0cmlnZ2VyLgogICAqIEByZXR2YWwgTm9uZQpAQCAtODYyLDggKzg1MCw4IEBACiAgICovCiAjZGVmaW5lIF9fSEFMX0NPTVBfQ09NUDZfRVhUSV9DTEVBUl9GTEFHKCkgICAgICAgICAgICBMTF9FWFRJX0NsZWFyRmxhZ18zMl82MyhDT01QX0VYVElfTElORV9DT01QNikKIAotI2VuZGlmIC8qIFNUTTMyRzQ3NHh4IHx8IFNUTTMyRzQ4NHh4IHx8IFNUTTMyRzQ3M3h4ICovCi0jaWYgIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjZW5kaWYgLyogU1RNMzJHNDc0eHggfHwgU1RNMzJHNDg0eHggfHwgU1RNMzJHNDczeHggfHwgU1RNMzJHNDgzeHgqLworI2lmICBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIENPTVA3IEVYVEkgbGluZSByaXNpbmcgZWRnZSB0cmlnZ2VyLgogICAqIEByZXR2YWwgTm9uZQpAQCAtOTQ4LDcgKzkzNiw3IEBACiAgICovCiAjZGVmaW5lIF9fSEFMX0NPTVBfQ09NUDdfRVhUSV9DTEVBUl9GTEFHKCkgICAgICAgICAgICBMTF9FWFRJX0NsZWFyRmxhZ18zMl82MyhDT01QX0VYVElfTElORV9DT01QNykKIAotI2VuZGlmIC8qIFNUTTMyRzQ3NHh4IHx8IFNUTTMyRzQ4NHh4IHx8IFNUTTMyRzQ3M3h4ICovCisjZW5kaWYgLyogU1RNMzJHNDc0eHggfHwgU1RNMzJHNDg0eHggfHwgU1RNMzJHNDczeHggfHwgU1RNMzJHNDgzeHggKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC05NzEsNyArOTU5LDcgQEAKICNkZWZpbmUgQ09NUF9FWFRJX0xJTkVfQ09NUDIgICAgICAgICAgIChMTF9FWFRJX0xJTkVfMjIpICAvKiE8IEVYVEkgbGluZSAyMiBjb25uZWN0ZWQgdG8gQ09NUDIgb3V0cHV0LiBOb3RlOiBGb3IgQ09NUHggaW5zdGFuY2UgYXZhaWxhYmlsaXR5LCBwbGVhc2UgcmVmZXIgdG8gZGF0YXNoZWV0ICovCiAjZGVmaW5lIENPTVBfRVhUSV9MSU5FX0NPTVAzICAgICAgICAgICAoTExfRVhUSV9MSU5FXzI5KSAgLyohPCBFWFRJIGxpbmUgMjkgY29ubmVjdGVkIHRvIENPTVAzIG91dHB1dC4gTm90ZTogRm9yIENPTVB4IGluc3RhbmNlIGF2YWlsYWJpbGl0eSwgcGxlYXNlIHJlZmVyIHRvIGRhdGFzaGVldCAqLwogI2RlZmluZSBDT01QX0VYVElfTElORV9DT01QNCAgICAgICAgICAgKExMX0VYVElfTElORV8zMCkgIC8qITwgRVhUSSBsaW5lIDMwIGNvbm5lY3RlZCB0byBDT01QNCBvdXRwdXQuIE5vdGU6IEZvciBDT01QeCBpbnN0YW5jZSBhdmFpbGFiaWxpdHksIHBsZWFzZSByZWZlciB0byBkYXRhc2hlZXQgKi8KLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAjZGVmaW5lIENPTVBfRVhUSV9MSU5FX0NPTVA1ICAgICAgICAgICAoTExfRVhUSV9MSU5FXzMxKSAgLyohPCBFWFRJIGxpbmUgMzEgY29ubmVjdGVkIHRvIENPTVA1IG91dHB1dC4gTm90ZTogRm9yIENPTVB4IGluc3RhbmNlIGF2YWlsYWJpbGl0eSwgcGxlYXNlIHJlZmVyIHRvIGRhdGFzaGVldCAqLwogI2RlZmluZSBDT01QX0VYVElfTElORV9DT01QNiAgICAgICAgICAgKExMX0VYVElfTElORV8zMikgIC8qITwgRVhUSSBsaW5lIDMyIGNvbm5lY3RlZCB0byBDT01QNiBvdXRwdXQuIE5vdGU6IEZvciBDT01QeCBpbnN0YW5jZSBhdmFpbGFiaWxpdHksIHBsZWFzZSByZWZlciB0byBkYXRhc2hlZXQgKi8KICNkZWZpbmUgQ09NUF9FWFRJX0xJTkVfQ09NUDcgICAgICAgICAgIChMTF9FWFRJX0xJTkVfMzMpICAvKiE8IEVYVEkgbGluZSAzMyBjb25uZWN0ZWQgdG8gQ09NUDcgb3V0cHV0LiBOb3RlOiBGb3IgQ09NUHggaW5zdGFuY2UgYXZhaWxhYmlsaXR5LCBwbGVhc2UgcmVmZXIgdG8gZGF0YXNoZWV0ICovCkBAIC0xMDA4LDcgKzk5Niw3IEBACiAgICogQHBhcmFtICBfX0lOU1RBTkNFX18gIHNwZWNpZmllcyB0aGUgQ09NUCBpbnN0YW5jZS4KICAgKiBAcmV0dmFsIHZhbHVlIG9mIEByZWYgQ09NUF9FeHRpTGluZQogICAqLwotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICNkZWZpbmUgQ09NUF9HRVRfRVhUSV9MSU5FKF9fSU5TVEFOQ0VfXykgICAgKCgoX19JTlNUQU5DRV9fKSA9PSBDT01QMSkgPyBDT01QX0VYVElfTElORV9DT01QMSAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOigoX19JTlNUQU5DRV9fKSA9PSBDT01QMikgPyBDT01QX0VYVElfTElORV9DT01QMiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6KChfX0lOU1RBTkNFX18pID09IENPTVAzKSA/IENPTVBfRVhUSV9MSU5FX0NPTVAzIFwKQEAgLTEwMzIsNyArMTAyMCw3IEBACiAjZGVmaW5lIElTX0NPTVBfSU5QVVRfUExVUyhfX0NPTVBfSU5TVEFOQ0VfXywgX19JTlBVVF9QTFVTX18pICgoKF9fSU5QVVRfUExVU19fKSA9PSBDT01QX0lOUFVUX1BMVVNfSU8xKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fSU5QVVRfUExVU19fKSA9PSBDT01QX0lOUFVUX1BMVVNfSU8yKSkKIAotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICNkZWZpbmUgSVNfQ09NUF9JTlBVVF9NSU5VUyhfX0NPTVBfSU5TVEFOQ0VfXywgX19JTlBVVF9NSU5VU19fKSAoKChfX0lOUFVUX01JTlVTX18pID09IENPTVBfSU5QVVRfTUlOVVNfMV80VlJFRklOVCkgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOUFVUX01JTlVTX18pID09IENPTVBfSU5QVVRfTUlOVVNfMV8yVlJFRklOVCkgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0lOUFVUX01JTlVTX18pID09IENPTVBfSU5QVVRfTUlOVVNfM180VlJFRklOVCkgIHx8IFwKQEAgLTExNDUsNyArMTEzMyw3IEBACiAgICB8fCAoKF9fT1VUUFVUX0JMQU5LSU5HX1NPVVJDRV9fKSA9PSBDT01QX0JMQU5LSU5HU1JDX1RJTTE1X09DMSkgICAgICAgICAgXAogICAgfHwgKChfX09VVFBVVF9CTEFOS0lOR19TT1VSQ0VfXykgPT0gQ09NUF9CTEFOS0lOR1NSQ19USU00X09DMykgICAgICAgICAgIFwKICAgKQotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICNkZWZpbmUgSVNfQ09NUF9CTEFOS0lOR1NSQ19JTlNUQU5DRShfX0lOU1RBTkNFX18sIF9fT1VUUFVUX0JMQU5LSU5HX1NPVVJDRV9fKSAgXAogICAgKCgoKF9fSU5TVEFOQ0VfXykgPT0gQ09NUDEpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgKCgoX19PVVRQVVRfQkxBTktJTkdfU09VUkNFX18pID09IENPTVBfQkxBTktJTkdTUkNfTk9ORSkgICAgICAgICAgICB8fCAgICAgIFwKQEAgLTEyNDQsOCArMTIzMiw2IEBACiAjZGVmaW5lIElTX0NPTVBfT1VUUFVUX0xFVkVMKF9fT1VUUFVUX0xFVkVMX18pICgoKF9fT1VUUFVUX0xFVkVMX18pID09IENPTVBfT1VUUFVUX0xFVkVMX0xPVykgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19PVVRQVVRfTEVWRUxfXykgPT0gQ09NUF9PVVRQVVRfTEVWRUxfSElHSCkpCiAKLSNkZWZpbmUgSVNfQ09NUF9ERUdMSVRDSEVSX01PREUoX19NT0RFX18pICAgKCgoX19NT0RFX18pID09IENPTVBfREVHTElUQ0hFUl9ESVNBQkxFRCkgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IENPTVBfREVHTElUQ0hFUl9FTkFCTEVEKSkKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9jb25mX3RlbXBsYXRlLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9jb25mX3RlbXBsYXRlLmgKaW5kZXggYzVjNjg0MS4uZTUxODM5MSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfY29uZl90ZW1wbGF0ZS5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2NvbmZfdGVtcGxhdGUuaApAQCAtOCw3ICs4LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9jb3J0ZXguaCBiL0luYy9zdG0zMmc0eHhfaGFsX2NvcnRleC5oCmluZGV4IGE5ZjAyNzguLjE4NjM3NmMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2NvcnRleC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2NvcnRleC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX2NyYy5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfY3JjLmgKaW5kZXggYjQ5N2Y1Yi4uZGQ5NWYzOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfY3JjLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfY3JjLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfY3JjX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9jcmNfZXguaAppbmRleCA0NDcyNWY3Li4zYTliODNjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9jcmNfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9jcmNfZXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9kYWMuaCBiL0luYy9zdG0zMmc0eHhfaGFsX2RhYy5oCmluZGV4IDE2ZTJkNmUuLjQ1NTcxNGEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2RhYy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2RhYy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTc5LDE3ICs3OSwxNyBAQAogICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICAgRXJyb3JDb2RlOyAgICAgLyohPCBEQUMgRXJyb3IgY29kZSAgICAgICAgICAgICAgICAgICAgKi8KIAogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSAgdm9pZCAoKiBDb252Q3BsdENhbGxiYWNrQ2gxKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci0gIHZvaWQgKCogQ29udkhhbGZDcGx0Q2FsbGJhY2tDaDEpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLSAgdm9pZCAoKiBFcnJvckNhbGxiYWNrQ2gxKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7Ci0gIHZvaWQgKCogRE1BVW5kZXJydW5DYWxsYmFja0NoMSkoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIENvbnZDcGx0Q2FsbGJhY2tDaDIpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLSAgdm9pZCAoKiBDb252SGFsZkNwbHRDYWxsYmFja0NoMikoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIEVycm9yQ2FsbGJhY2tDaDIpKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKLSAgdm9pZCAoKiBETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogQ29udkNwbHRDYWxsYmFja0NoMSkgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIENvbnZIYWxmQ3BsdENhbGxiYWNrQ2gxKSAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBFcnJvckNhbGxiYWNrQ2gxKSAgICAgICAgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogRE1BVW5kZXJydW5DYWxsYmFja0NoMSkgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIENvbnZDcGx0Q2FsbGJhY2tDaDIpICAgICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKKyAgdm9pZCAoKiBDb252SGFsZkNwbHRDYWxsYmFja0NoMikgICAgICAgIChzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogRXJyb3JDYWxsYmFja0NoMikgICAgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIERNQVVuZGVycnVuQ2FsbGJhY2tDaDIpICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKIAotICB2b2lkICgqIE1zcEluaXRDYWxsYmFjaykoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOwotICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19EQUNfSGFuZGxlVHlwZURlZiAqaGRhYyk7CisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKSAgICAgICAgICAgICAgICAoc3RydWN0IF9fREFDX0hhbmRsZVR5cGVEZWYgKmhkYWMpOworICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrICkgICAgICAgICAgICAgKHN0cnVjdCBfX0RBQ19IYW5kbGVUeXBlRGVmICpoZGFjKTsKICNlbmRpZiAvKiBVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogfSBEQUNfSGFuZGxlVHlwZURlZjsKQEAgLTE2OSw4ICsxNjksOCBAQAogICBIQUxfREFDX0NIMl9IQUxGX0NPTVBMRVRFX0NCX0lEICAgICAgICAgICAgPSAweDA1VSwgIC8qITwgREFDIENIMiBoYWxmIENvbXBsZXRlIENhbGxiYWNrIElEICovCiAgIEhBTF9EQUNfQ0gyX0VSUk9SX0lEICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDZVLCAgLyohPCBEQUMgQ0gyIGVycm9yIENhbGxiYWNrIElEICAgICAgICAgKi8KICAgSEFMX0RBQ19DSDJfVU5ERVJSVU5fQ0JfSUQgICAgICAgICAgICAgICAgID0gMHgwN1UsICAvKiE8IERBQyBDSDIgdW5kZXJydW4gQ2FsbGJhY2sgSUQgICAgICAqLwotICBIQUxfREFDX01TUF9JTklUX0NCX0lEICAgICAgICAgICAgICAgICAgICAgPSAweDA4VSwgIC8qITwgREFDIE1zcEluaXQgQ2FsbGJhY2sgSUQgICAgICAgICAgICovCi0gIEhBTF9EQUNfTVNQX0RFSU5JVF9DQl9JRCAgICAgICAgICAgICAgICAgICA9IDB4MDlVLCAgLyohPCBEQUMgTXNwRGVJbml0IENhbGxiYWNrIElEICAgICAgICAgKi8KKyAgSEFMX0RBQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICAgICAgICAgID0gMHgwOFUsICAvKiE8IERBQyBNc3BJbml0IENhbGxiYWNrIElEICAgICAgICAgICAqLworICBIQUxfREFDX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgICAgICAgICAgPSAweDA5VSwgIC8qITwgREFDIE1zcERlSW5pdCBDYWxsYmFjayBJRCAgICAgICAgICovCiAgIEhBTF9EQUNfQUxMX0NCX0lEICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEFVICAgLyohPCBEQUMgQWxsIElEICAgICAgICAgICAgICAgICAgICAgICAgKi8KIH0gSEFMX0RBQ19DYWxsYmFja0lEVHlwZURlZjsKIApAQCAtMjM2LDYgKzIzNiw3IEBACiAjZGVmaW5lIERBQ19UUklHR0VSX0hSVElNX1RSRzAxICAgICAgICAgKERBQ19DUl9UU0VMMV8zIHwgREFDX0NSX1RTRUwxXzIgfCBEQUNfQ1JfVFNFTDFfMSB8IERBQ19DUl9UU0VMMV8wIHwgREFDX0NSX1RFTjEpIC8qITwgREFDMSY0OiBIUlRJTSBUUklHIE9VVCAxIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwuIE5vdGU6IG9ubHkgdG8gYmUgdXNlZCBhcyB1cGRhdGUgb3IgcmVzZXQgKHNhd3Rvb3RoIGdlbmVyYXRpb24pIHRyaWdnZXIuIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIERBQ3ggaW5zdGFuY2UgYXZhaWxhYmlsaXR5LiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLwogI2RlZmluZSBEQUNfVFJJR0dFUl9IUlRJTV9UUkcwMiAgICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgfCBEQUNfQ1JfVFNFTDFfMCB8IERBQ19DUl9URU4xKSAvKiE8IERBQzI6IEhSVElNIFRSSUcgT1VUIDEgc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgY29udmVyc2lvbiB0cmlnZ2VyIGZvciBEQUMgY2hhbm5lbC4gTm90ZTogb25seSB0byBiZSB1c2VkIGFzIHVwZGF0ZSBvciByZXNldCAoc2F3dG9vdGggZ2VuZXJhdGlvbikgdHJpZ2dlci4gT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG9ubHkgYXZhaWxhYmxlIGlmIEhSVElNIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGFuZCBEQUMyIGluc3RhbmNlIHByZXNlbnQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0IGFuZCBEQUMyIGluc3RhbmNlIGF2YWlsYWJpbGl0eSkgKi8KICNkZWZpbmUgREFDX1RSSUdHRVJfSFJUSU1fVFJHMDMgICAgICAgICAoREFDX0NSX1RTRUwxXzMgfCBEQUNfQ1JfVFNFTDFfMiB8IERBQ19DUl9UU0VMMV8xIHwgREFDX0NSX1RTRUwxXzAgfCBEQUNfQ1JfVEVOMSkgLyohPCBEQUMzOiBIUlRJTSBUUklHIE9VVCAxIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwuIE5vdGU6IG9ubHkgdG8gYmUgdXNlZCBhcyB1cGRhdGUgb3IgcmVzZXQgKHNhd3Rvb3RoIGdlbmVyYXRpb24pIHRyaWdnZXIuIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBvbmx5IGF2YWlsYWJsZSBpZiBIUlRJTSBmZWF0dXJlIGlzIHN1cHBvcnRlZCAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3Igc3VwcG9ydGVkIGZlYXR1cmVzIGxpc3QpICovCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0yOTgsNiArMjk5LDcgQEAKICNkZWZpbmUgREFDX0NISVBDT05ORUNUX0VYVEVSTkFMICAgICAgICgxVUwgPDwgMCkKICNkZWZpbmUgREFDX0NISVBDT05ORUNUX0lOVEVSTkFMICAgICAgICgxVUwgPDwgMSkKICNkZWZpbmUgREFDX0NISVBDT05ORUNUX0JPVEggICAgICAgICAgICgxVUwgPDwgMikKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTMwNSw3ICszMDcsNiBAQAogLyoqIEBkZWZncm91cCBEQUNfVXNlclRyaW1taW5nIERBQyBVc2VyIFRyaW1taW5nCiAgICogQHsKICAgKi8KLQogI2RlZmluZSBEQUNfVFJJTU1JTkdfRkFDVE9SWSAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgIC8qITwgRmFjdG9yeSB0cmltbWluZyAqLwogI2RlZmluZSBEQUNfVFJJTU1JTkdfVVNFUiAgICAgICAgICAgMHgwMDAwMDAwMVUgICAgICAgICAgIC8qITwgVXNlciB0cmltbWluZyAqLwogCkBAIC0zMjIsNyArMzIzLDYgQEAKIC8qKgogICAqIEB9CiAgICovCi0KIC8qKiBAZGVmZ3JvdXAgREFDX0hpZ2hGcmVxdWVuY3kgREFDIGhpZ2ggZnJlcXVlbmN5IGludGVyZmFjZSBtb2RlCiAgICogQHsKICAgKi8KQEAgLTM1Miw4ICszNTIsOCBAQAogI2lmIChVU0VfSEFMX0RBQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICNkZWZpbmUgX19IQUxfREFDX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlICAgICAgICAgICAgID0gSEFMX0RBQ19TVEFURV9SRVNFVDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BJbml0Q2FsbGJhY2sgICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BJbml0Q2FsbGJhY2sgICA9IE5VTEw7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIF9fSEFMX0RBQ19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfREFDX1NUQVRFX1JFU0VUKQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfZGFjX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9kYWNfZXguaAppbmRleCA3MjgyY2NhLi4wM2UxYWI1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9kYWNfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9kYWNfZXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0yMDIsNyArMjAyLDYgQEAKICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKICNlbmRpZgotCiAjZGVmaW5lICBJU19EQUNfSElHSF9GUkVRVUVOQ1lfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBEQUNfSElHSF9GUkVRVUVOQ1lfSU5URVJGQUNFX01PREVfRElTQUJMRSkgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBEQUNfSElHSF9GUkVRVUVOQ1lfSU5URVJGQUNFX01PREVfQUJPVkVfODBNSFopICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBEQUNfSElHSF9GUkVRVUVOQ1lfSU5URVJGQUNFX01PREVfQUJPVkVfMTYwTUhaKSAgICB8fCBcCkBAIC0zMTUsNyArMzE0LDYgQEAKICAgKiBAfQogICAqLwogCi0KIC8qKiBAYWRkdG9ncm91cCBEQUNFeF9Qcml2YXRlX0Z1bmN0aW9ucwogICAqIEB7CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9kZWYuaCBiL0luYy9zdG0zMmc0eHhfaGFsX2RlZi5oCmluZGV4IDk5ZTY2OTYuLmUzMGE2MTUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2RlZi5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2RlZi5oCkBAIC03LDcgKzcsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX2RtYS5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfZG1hLmgKaW5kZXggZjlhZGRmZi4uNTZiOWE4YyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfZG1hLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfZG1hLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfZG1hX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9kbWFfZXguaAppbmRleCA5YzUxMDgyLi43MGY1NThjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9kbWFfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9kbWFfZXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9leHRpLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9leHRpLmgKaW5kZXggNGM4YmZmOC4uMDg3MmUyOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfZXh0aS5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2V4dGkuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9mZGNhbi5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfZmRjYW4uaAppbmRleCA1ODljMDZkLi40MzExZjExIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9mZGNhbi5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2ZkY2FuLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfZmxhc2guaCBiL0luYy9zdG0zMmc0eHhfaGFsX2ZsYXNoLmgKaW5kZXggYWE2ODY4Zi4uNjU3ODM1OCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfZmxhc2guaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9mbGFzaC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAogICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX2ZsYXNoX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9mbGFzaF9leC5oCmluZGV4IDM2NGI3OWUuLmVmMDE1YjMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2ZsYXNoX2V4LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfZmxhc2hfZXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+CisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKICAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9mbGFzaF9yYW1mdW5jLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9mbGFzaF9yYW1mdW5jLmgKaW5kZXggNDgyZTkxMS4uMzNiYzEzNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfZmxhc2hfcmFtZnVuYy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2ZsYXNoX3JhbWZ1bmMuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+CisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKICAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9mbWFjLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9mbWFjLmgKaW5kZXggOWMyOGI1YS4uYjZlMjFkNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfZm1hYy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2ZtYWMuaApAQCAtMSwxMyArMSwxMyBAQAogLyoqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqIEBmaWxlICAgIHN0bTMyZzR4eF9mbWFjLmgKKyAgKiBAZmlsZSAgICBzdG0zMmc0eHhfaGFsX2ZtYWMuaAogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCiAgICogQGJyaWVmICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgZm9yIHRoZSBGTUFDIGZpcm13YXJlCiAgICogICAgICAgICAgbGlicmFyeS4KICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9ncGlvLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9ncGlvLmgKaW5kZXggMzkzMDViOC4uZGNiMTg5NCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfZ3Bpby5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2dwaW8uaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0yMTMsOCArMjEzLDggQEAKICAgKi8KICNkZWZpbmUgSVNfR1BJT19QSU5fQUNUSU9OKEFDVElPTikgICgoKEFDVElPTikgPT0gR1BJT19QSU5fUkVTRVQpIHx8ICgoQUNUSU9OKSA9PSBHUElPX1BJTl9TRVQpKQogCi0jZGVmaW5lIElTX0dQSU9fUElOKF9fUElOX18pICAgICAgICAoKCgoX19QSU5fXykgJiBHUElPX1BJTl9NQVNLKSAhPSAweDAwVSkgJiZcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19QSU5fXykgJiB+R1BJT19QSU5fTUFTSykgPT0gMHgwMFUpKQorI2RlZmluZSBJU19HUElPX1BJTihfX1BJTl9fKSAgICAgICAgKCgoKHVpbnQzMl90KShfX1BJTl9fKSAmIEdQSU9fUElOX01BU0spICE9IDB4MDBVKSAmJlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoX19QSU5fXykgJiB+R1BJT19QSU5fTUFTSykgPT0gMHgwMFUpKQogCiAjZGVmaW5lIElTX0dQSU9fTU9ERShfX01PREVfXykgICAgICAoKChfX01PREVfXykgPT0gR1BJT19NT0RFX0lOUFVUKSAgICAgICAgICAgICAgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gR1BJT19NT0RFX09VVFBVVF9QUCkgICAgICAgICAgfHxcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9ncGlvX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9ncGlvX2V4LmgKaW5kZXggNzQyOWM3NS4uY2RhMTYzNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfZ3Bpb19leC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2dwaW9fZXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9ocnRpbS5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfaHJ0aW0uaAppbmRleCA1MGQ1NmNiLi4wODZlYzRmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9ocnRpbS5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2hydGltLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtMjUsMTAgKzI1LDEwIEBACiAgZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSFJUSU0xKQogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmc0eHhfaGFsX2RlZi5oIgogCisjaWYgZGVmaW5lZChIUlRJTTEpCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJHNHh4X0hBTF9Ecml2ZXIKICAgKiBAewogICAqLwpAQCAtNjg4LDYgKzY4OCwxMCBAQAogI2RlZmluZSBIUlRJTV9BRENUUklHR0VSXzIgIDB4MDAwMDAwMDJVICAvKiE8IEFEQyB0cmlnZ2VyIDIgaWRlbnRpZmllciAqLwogI2RlZmluZSBIUlRJTV9BRENUUklHR0VSXzMgIDB4MDAwMDAwMDRVICAvKiE8IEFEQyB0cmlnZ2VyIDMgaWRlbnRpZmllciAqLwogI2RlZmluZSBIUlRJTV9BRENUUklHR0VSXzQgIDB4MDAwMDAwMDhVICAvKiE8IEFEQyB0cmlnZ2VyIDQgaWRlbnRpZmllciAqLworLyoqCisgICogQH0KKyAgKi8KKwogLyoqIEBkZWZncm91cCBIUlRJTV9BRENfRXh0X1RyaWdnZXIgSFJUSU0gQURDIEV4dGVuZGVkIFRyaWdnZXIKICAgKiBAewogICAqIEBicmllZiBDb25zdGFudHMgZGVmaW5pbmcgQURDIEV4dGVuZGVkIHRyaWdnZXJzIGlkZW50aWZpZXJzCkBAIC0xMjA3LDE4ICsxMjExLDE4IEBACiAgICogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgZXZlbnRzIHRoYXQgY2FuIGJlIHNlbGVjdGVkIHRvIGNvbmZpZ3VyZSB0aGUKICAgKiAgICAgICAgc2V0IGNyb3NzYmFyIG9mIGEgdGltZXIgb3V0cHV0CiAgICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9OT05FICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgIC8qITwgUmVzZXQgdGhlIG91dHB1dCBzZXQgY3Jvc3NiYXIgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1JFU1lOQyAgICAgKEhSVElNX1NFVDFSX1JFU1lOQykgICAgLyohPCBUaW1lciByZXNldCBldmVudCBjb21pbmcgc29sZWx5IGZyb20gc29mdHdhcmUgb3IgU1lOQyBpbnB1dCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1QRVIgICAgIChIUlRJTV9TRVQxUl9QRVIpICAgICAgIC8qITwgVGltZXIgcGVyaW9kIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNNUDEgICAgKEhSVElNX1NFVDFSX0NNUDEpICAgICAgLyohPCBUaW1lciBjb21wYXJlIDEgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNQ01QMiAgICAoSFJUSU1fU0VUMVJfQ01QMikgICAgICAvKiE8IFRpbWVyIGNvbXBhcmUgMiBldmVudCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DTVAzICAgIChIUlRJTV9TRVQxUl9DTVAzKSAgICAgIC8qITwgVGltZXIgY29tcGFyZSAzIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNNUDQgICAgKEhSVElNX1NFVDFSX0NNUDQpICAgICAgLyohPCBUaW1lciBjb21wYXJlIDQgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfTUFTVEVSUEVSICAoSFJUSU1fU0VUMVJfTVNUUEVSKSAgICAvKiE8IFRoZSBtYXN0ZXIgdGltZXIgcGVyaW9kIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX01BU1RFUkNNUDEgKEhSVElNX1NFVDFSX01TVENNUDEpICAgLyohPCBNYXN0ZXIgVGltZXIgY29tcGFyZSAxIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX01BU1RFUkNNUDIgKEhSVElNX1NFVDFSX01TVENNUDIpICAgLyohPCBNYXN0ZXIgVGltZXIgY29tcGFyZSAyIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX01BU1RFUkNNUDMgKEhSVElNX1NFVDFSX01TVENNUDMpICAgLyohPCBNYXN0ZXIgVGltZXIgY29tcGFyZSAzIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX01BU1RFUkNNUDQgKEhSVElNX1NFVDFSX01TVENNUDQpICAgLyohPCBNYXN0ZXIgVGltZXIgY29tcGFyZSA0IGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX05PTkUgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZXNldCB0aGUgb3V0cHV0IHNldCBjcm9zc2JhciAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfUkVTWU5DICAgICAoSFJUSU1fU0VUMVJfUkVTWU5DKSAgICAgICAgICAgICAvKiE8IFRpbWVyIHJlc2V0IGV2ZW50IGNvbWluZyBzb2xlbHkgZnJvbSBzb2Z0d2FyZSBvciBTWU5DIGlucHV0IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTVBFUiAgICAgKEhSVElNX1NFVDFSX1BFUikgICAgICAgICAgICAgICAgLyohPCBUaW1lciBwZXJpb2QgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNQ01QMSAgICAoSFJUSU1fU0VUMVJfQ01QMSkgICAgICAgICAgICAgICAvKiE8IFRpbWVyIGNvbXBhcmUgMSBldmVudCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9USU1DTVAyICAgIChIUlRJTV9TRVQxUl9DTVAyKSAgICAgICAgICAgICAgIC8qITwgVGltZXIgY29tcGFyZSAyIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUNNUDMgICAgKEhSVElNX1NFVDFSX0NNUDMpICAgICAgICAgICAgICAgLyohPCBUaW1lciBjb21wYXJlIDMgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfVElNQ01QNCAgICAoSFJUSU1fU0VUMVJfQ01QNCkgICAgICAgICAgICAgICAvKiE8IFRpbWVyIGNvbXBhcmUgNCBldmVudCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFNFVF9NQVNURVJQRVIgIChIUlRJTV9TRVQxUl9NU1RQRVIpICAgICAgICAgICAgIC8qITwgVGhlIG1hc3RlciB0aW1lciBwZXJpb2QgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfTUFTVEVSQ01QMSAoSFJUSU1fU0VUMVJfTVNUQ01QMSkgICAgICAgICAgICAvKiE8IE1hc3RlciBUaW1lciBjb21wYXJlIDEgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfTUFTVEVSQ01QMiAoSFJUSU1fU0VUMVJfTVNUQ01QMikgICAgICAgICAgICAvKiE8IE1hc3RlciBUaW1lciBjb21wYXJlIDIgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfTUFTVEVSQ01QMyAoSFJUSU1fU0VUMVJfTVNUQ01QMykgICAgICAgICAgICAvKiE8IE1hc3RlciBUaW1lciBjb21wYXJlIDMgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfTUFTVEVSQ01QNCAoSFJUSU1fU0VUMVJfTVNUQ01QNCkgICAgICAgICAgICAvKiE8IE1hc3RlciBUaW1lciBjb21wYXJlIDQgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwogLyogVGltZXIgRXZlbnRzIG1hcHBpbmcgZm9yIFRpbWVyIEEgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUFFVjFfVElNQkNNUDEgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQxKSAgLyohPCBUaW1lciBldmVudCAxIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUFFVjJfVElNQkNNUDIgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQyKSAgLyohPCBUaW1lciBldmVudCAyIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KQEAgLTEyNzksMTggKzEyODMsMTcgQEAKICNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUZFVjdfVElNRENNUDQgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ3KSAgLyohPCBUaW1lciBldmVudCA3IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUZFVjhfVElNRUNNUDIgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ4KSAgLyohPCBUaW1lciBldmVudCA4IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1RJTUZFVjlfVElNRUNNUDMgICAgKEhSVElNX1NFVDFSX1RJTUVWTlQ5KSAgLyohPCBUaW1lciBldmVudCA5IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KLQotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzEgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UMSkgICAvKiE8IEV4dGVybmFsIGV2ZW50IDEgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzIgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UMikgICAvKiE8IEV4dGVybmFsIGV2ZW50IDIgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzMgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UMykgICAvKiE8IEV4dGVybmFsIGV2ZW50IDMgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzQgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UNCkgICAvKiE8IEV4dGVybmFsIGV2ZW50IDQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzUgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UNSkgICAvKiE8IEV4dGVybmFsIGV2ZW50IDUgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzYgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UNikgICAvKiE8IEV4dGVybmFsIGV2ZW50IDYgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzcgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UNykgICAvKiE8IEV4dGVybmFsIGV2ZW50IDcgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzggICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UOCkgICAvKiE8IEV4dGVybmFsIGV2ZW50IDggZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzkgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UOSkgICAvKiE8IEV4dGVybmFsIGV2ZW50IDkgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzEwICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UMTApICAvKiE8IEV4dGVybmFsIGV2ZW50IDEwIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1VQREFURSAgICAgKEhSVElNX1NFVDFSX1VQREFURSkgICAgLyohPCBUaW1lciByZWdpc3RlciB1cGRhdGUgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzEgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UMSkgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDEgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzIgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UMikgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDIgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzMgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UMykgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDMgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzQgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UNCkgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzUgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UNSkgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDUgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzYgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UNikgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDYgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzcgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UNykgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDcgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzggICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UOCkgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDggZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzkgICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UOSkgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDkgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRTRVRfRUVWXzEwICAgICAoSFJUSU1fU0VUMVJfRVhUVk5UMTApICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDEwIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBhY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUU0VUX1VQREFURSAgICAgKEhSVElNX1NFVDFSX1VQREFURSkgICAgICAgICAgICAgLyohPCBUaW1lciByZWdpc3RlciB1cGRhdGUgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGFjdGl2ZSBzdGF0ZSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEzMDAsMTggKzEzMDMsMTggQEAKICAgKiBAYnJpZWYgQ29uc3RhbnRzIGRlZmluaW5nIHRoZSBldmVudHMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgdG8gY29uZmlndXJlIHRoZQogICAqICAgICAgICBzZXQgY3Jvc3NiYXIgb2YgYSB0aW1lciBvdXRwdXQKICAgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfTk9ORSAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IFJlc2V0IHRoZSBvdXRwdXQgcmVzZXQgY3Jvc3NiYXIgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfUkVTWU5DICAgICAoSFJUSU1fUlNUMVJfUkVTWU5DKSAgICAvKiE8IFRpbWVyIHJlc2V0IGV2ZW50IGNvbWluZyBzb2xlbHkgZnJvbSBzb2Z0d2FyZSBvciBTWU5DIGlucHV0IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1QRVIgICAgIChIUlRJTV9SU1QxUl9QRVIpICAgICAgIC8qITwgVGltZXIgcGVyaW9kIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DTVAxICAgIChIUlRJTV9SU1QxUl9DTVAxKSAgICAgIC8qITwgVGltZXIgY29tcGFyZSAxIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DTVAyICAgIChIUlRJTV9SU1QxUl9DTVAyKSAgICAgIC8qITwgVGltZXIgY29tcGFyZSAyIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DTVAzICAgIChIUlRJTV9SU1QxUl9DTVAzKSAgICAgIC8qITwgVGltZXIgY29tcGFyZSAzIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1DTVA0ICAgIChIUlRJTV9SU1QxUl9DTVA0KSAgICAgIC8qITwgVGltZXIgY29tcGFyZSA0IGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9NQVNURVJQRVIgIChIUlRJTV9SU1QxUl9NU1RQRVIpICAgIC8qITwgVGhlIG1hc3RlciB0aW1lciBwZXJpb2QgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX01BU1RFUkNNUDEgKEhSVElNX1JTVDFSX01TVENNUDEpICAgLyohPCBNYXN0ZXIgVGltZXIgY29tcGFyZSAxIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9NQVNURVJDTVAyIChIUlRJTV9SU1QxUl9NU1RDTVAyKSAgIC8qITwgTWFzdGVyIFRpbWVyIGNvbXBhcmUgMiBldmVudCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QMyAoSFJUSU1fUlNUMVJfTVNUQ01QMykgICAvKiE8IE1hc3RlciBUaW1lciBjb21wYXJlIDMgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX01BU1RFUkNNUDQgKEhSVElNX1JTVDFSX01TVENNUDQpICAgLyohPCBNYXN0ZXIgVGltZXIgY29tcGFyZSA0IGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9OT05FICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVzZXQgdGhlIG91dHB1dCByZXNldCBjcm9zc2JhciAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9SRVNZTkMgICAgIChIUlRJTV9SU1QxUl9SRVNZTkMpICAgICAgICAgICAgIC8qITwgVGltZXIgcmVzZXQgZXZlbnQgY29taW5nIHNvbGVseSBmcm9tIHNvZnR3YXJlIG9yIFNZTkMgaW5wdXQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTVBFUiAgICAgKEhSVElNX1JTVDFSX1BFUikgICAgICAgICAgICAgICAgLyohPCBUaW1lciBwZXJpb2QgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNNUDEgICAgKEhSVElNX1JTVDFSX0NNUDEpICAgICAgICAgICAgICAgLyohPCBUaW1lciBjb21wYXJlIDEgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNNUDIgICAgKEhSVElNX1JTVDFSX0NNUDIpICAgICAgICAgICAgICAgLyohPCBUaW1lciBjb21wYXJlIDIgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNNUDMgICAgKEhSVElNX1JTVDFSX0NNUDMpICAgICAgICAgICAgICAgLyohPCBUaW1lciBjb21wYXJlIDMgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUNNUDQgICAgKEhSVElNX1JTVDFSX0NNUDQpICAgICAgICAgICAgICAgLyohPCBUaW1lciBjb21wYXJlIDQgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX01BU1RFUlBFUiAgKEhSVElNX1JTVDFSX01TVFBFUikgICAgICAgICAgICAgLyohPCBUaGUgbWFzdGVyIHRpbWVyIHBlcmlvZCBldmVudCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QMSAoSFJUSU1fUlNUMVJfTVNUQ01QMSkgICAgICAgICAgICAvKiE8IE1hc3RlciBUaW1lciBjb21wYXJlIDEgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX01BU1RFUkNNUDIgKEhSVElNX1JTVDFSX01TVENNUDIpICAgICAgICAgICAgLyohPCBNYXN0ZXIgVGltZXIgY29tcGFyZSAyIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9NQVNURVJDTVAzIChIUlRJTV9SU1QxUl9NU1RDTVAzKSAgICAgICAgICAgIC8qITwgTWFzdGVyIFRpbWVyIGNvbXBhcmUgMyBldmVudCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QNCAoSFJUSU1fUlNUMVJfTVNUQ01QNCkgICAgICAgICAgICAvKiE8IE1hc3RlciBUaW1lciBjb21wYXJlIDQgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCiAvKiBUaW1lciBFdmVudHMgbWFwcGluZyBmb3IgVGltZXIgQSAqLwogI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1BRVYxX1RJTUJDTVAxICAgIChIUlRJTV9SU1QxUl9USU1FVk5UMSkgIC8qITwgVGltZXIgZXZlbnQgMSBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWMl9USU1CQ01QMiAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDIpICAvKiE8IFRpbWVyIGV2ZW50IDIgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCkBAIC0xMzcyLDE4ICsxMzc1LDE3IEBACiAjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1RJTUZFVjdfVElNRENNUDQgICAgKEhSVElNX1JTVDFSX1RJTUVWTlQ3KSAgLyohPCBUaW1lciBldmVudCA3IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwogI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9USU1GRVY4X1RJTUVDTVAyICAgIChIUlRJTV9SU1QxUl9USU1FVk5UOCkgIC8qITwgVGltZXIgZXZlbnQgOCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KICNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfVElNRkVWOV9USU1FQ01QMyAgICAoSFJUSU1fUlNUMVJfVElNRVZOVDkpICAvKiE8IFRpbWVyIGV2ZW50IDkgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCi0KLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzEgICAgICAoSFJUSU1fUlNUMVJfRVhUVk5UMSkgICAvKiE8IEV4dGVybmFsIGV2ZW50IDEgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX0VFVl8yICAgICAgKEhSVElNX1JTVDFSX0VYVFZOVDIpICAgLyohPCBFeHRlcm5hbCBldmVudCAyIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9FRVZfMyAgICAgIChIUlRJTV9SU1QxUl9FWFRWTlQzKSAgIC8qITwgRXh0ZXJuYWwgZXZlbnQgMyBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzQgICAgICAoSFJUSU1fUlNUMVJfRVhUVk5UNCkgICAvKiE8IEV4dGVybmFsIGV2ZW50IDQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX0VFVl81ICAgICAgKEhSVElNX1JTVDFSX0VYVFZOVDUpICAgLyohPCBFeHRlcm5hbCBldmVudCA1IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9FRVZfNiAgICAgIChIUlRJTV9SU1QxUl9FWFRWTlQ2KSAgIC8qITwgRXh0ZXJuYWwgZXZlbnQgNiBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzcgICAgICAoSFJUSU1fUlNUMVJfRVhUVk5UNykgICAvKiE8IEV4dGVybmFsIGV2ZW50IDcgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX0VFVl84ICAgICAgKEhSVElNX1JTVDFSX0VYVFZOVDgpICAgLyohPCBFeHRlcm5hbCBldmVudCA4IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9FRVZfOSAgICAgIChIUlRJTV9SU1QxUl9FWFRWTlQ5KSAgIC8qITwgRXh0ZXJuYWwgZXZlbnQgOSBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KLSNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzEwICAgICAoSFJUSU1fUlNUMVJfRVhUVk5UMTApICAvKiE8IEV4dGVybmFsIGV2ZW50IDEwIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLwotI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9VUERBVEUgICAgIChIUlRJTV9SU1QxUl9VUERBVEUpICAgIC8qITwgVGltZXIgcmVnaXN0ZXIgdXBkYXRlIGV2ZW50IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9FRVZfMSAgICAgIChIUlRJTV9SU1QxUl9FWFRWTlQxKSAgICAgICAgICAgIC8qITwgRXh0ZXJuYWwgZXZlbnQgMSBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzIgICAgICAoSFJUSU1fUlNUMVJfRVhUVk5UMikgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDIgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX0VFVl8zICAgICAgKEhSVElNX1JTVDFSX0VYVFZOVDMpICAgICAgICAgICAgLyohPCBFeHRlcm5hbCBldmVudCAzIGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9FRVZfNCAgICAgIChIUlRJTV9SU1QxUl9FWFRWTlQ0KSAgICAgICAgICAgIC8qITwgRXh0ZXJuYWwgZXZlbnQgNCBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzUgICAgICAoSFJUSU1fUlNUMVJfRVhUVk5UNSkgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDUgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX0VFVl82ICAgICAgKEhSVElNX1JTVDFSX0VYVFZOVDYpICAgICAgICAgICAgLyohPCBFeHRlcm5hbCBldmVudCA2IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9FRVZfNyAgICAgIChIUlRJTV9SU1QxUl9FWFRWTlQ3KSAgICAgICAgICAgIC8qITwgRXh0ZXJuYWwgZXZlbnQgNyBmb3JjZXMgdGhlIG91dHB1dCB0byBpdHMgaW5hY3RpdmUgc3RhdGUgKi8KKyNkZWZpbmUgSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzggICAgICAoSFJUSU1fUlNUMVJfRVhUVk5UOCkgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGV2ZW50IDggZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX0VFVl85ICAgICAgKEhSVElNX1JTVDFSX0VYVFZOVDkpICAgICAgICAgICAgLyohPCBFeHRlcm5hbCBldmVudCA5IGZvcmNlcyB0aGUgb3V0cHV0IHRvIGl0cyBpbmFjdGl2ZSBzdGF0ZSAqLworI2RlZmluZSBIUlRJTV9PVVRQVVRSRVNFVF9FRVZfMTAgICAgIChIUlRJTV9SU1QxUl9FWFRWTlQxMCkgICAgICAgICAgIC8qITwgRXh0ZXJuYWwgZXZlbnQgMTAgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCisjZGVmaW5lIEhSVElNX09VVFBVVFJFU0VUX1VQREFURSAgICAgKEhSVElNX1JTVDFSX1VQREFURSkgICAgICAgICAgICAgLyohPCBUaW1lciByZWdpc3RlciB1cGRhdGUgZXZlbnQgZm9yY2VzIHRoZSBvdXRwdXQgdG8gaXRzIGluYWN0aXZlIHN0YXRlICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTYxOCw4ICsxNjIwLDEyIEBACiAgICogQGJyaWVmIENvbnN0YW50cyBlbmFibGluZyB0aGUgRXh0ZXJuYWwgRXZlbnQgQ291bnRlciBBIG9yIEIgUmVzZXQgTW9kZQogICAqLwogI2RlZmluZSBIUlRJTV9USU1FRVZFTlRSRVNFVE1PREVfVU5DT05ESVRJT05BTCAgICgweDAwMDAwMDAwVSkgICAvKiE8IEV4dGVybmFsIEV2ZW50IENvdW50ZXIgaXMgcmVzZXQgb24gZWFjaCByZXNldCAvIHJvbGwtb3ZlciBldmVudCAqLwotI2RlZmluZSBIUlRJTV9USU1FRVZFTlRSRVNFVE1PREVfQ09ORElUSU9OQUwgICAgICgweDAwMDAwMDAxVSkgICAvKiE8IEV4dGVybmFsIEV2ZW50IENvdW50ZXIgaXMgcmVzZXQgb24gZWFjaCByZXNldCAvIHJvbGwtb3ZlciBldmVudCBvbmx5IGlmIG5vIGV2ZW50IG9jY3VycyBkdXJpbmcgbGFzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50aW5nIHBlcmlvZCAqLworI2RlZmluZSBIUlRJTV9USU1FRVZFTlRSRVNFVE1PREVfQ09ORElUSU9OQUwgICAgICgweDAwMDAwMDAxVSkgICAvKiE8IEV4dGVybmFsIEV2ZW50IENvdW50ZXIgaXMgcmVzZXQgb24gZWFjaCByZXNldCAvIHJvbGwtb3ZlciBldmVudCBvbmx5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm8gZXZlbnQgb2NjdXJzIGR1cmluZyBsYXN0IGNvdW50aW5nIHBlcmlvZCAqLworLyoqCisgICogQH0KKyAgKi8KKwogLyoqIEBkZWZncm91cCBIUlRJTV9UaW1lcl9SZVN5bmNVcGRhdGUgSFJUSU0gVGltZXIgUmUtU3luY2hyb25pemVkIHVwZGF0ZQogICAqIEB7CiAgICogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgdXBkYXRlIGNvbWluZyBjb25kaXRpb24KQEAgLTE5ODksNyArMTk5NSw4IEBACiAgICogQGJyaWVmIENvbnN0YW50cyBkZWZpbmluZyB0aGUgYmxhbmtpbmcgc291cmNlIG9mIGEgZmF1bHQgZXZlbnQKICAgKi8KICNkZWZpbmUgSFJUSU1fRkFVTFRCTEFOS0lOR01PREVfUlNUQUxJR05FRCAgKDB4MDAwMDAwMDBVKSAgICAgLyohPCBGYXVsdCBibGFua2luZyBzb3VyY2UgaXMgUmVzZXQtYWxpZ25lZCB3aW5kb3cgKi8KLSNkZWZpbmUgSFJUSU1fRkFVTFRCTEFOS0lOR01PREVfTU9WSU5HICAgICAgKDB4MDAwMDAwMDFVKSAgICAgLyohPCBGYXVsdCBibGFua2luZyBzb3VyY2UgaXMgTW92aW5nIHdpbmRvdyAqLy8qKgorI2RlZmluZSBIUlRJTV9GQVVMVEJMQU5LSU5HTU9ERV9NT1ZJTkcgICAgICAoMHgwMDAwMDAwMVUpICAgICAvKiE8IEZhdWx0IGJsYW5raW5nIHNvdXJjZSBpcyBNb3Zpbmcgd2luZG93ICovCisvKioKICAgKiBAfQogICAqLwogCkBAIC0yOTU4LDcxICsyOTY1LDcxIEBACiAjZGVmaW5lIElTX0hSVElNX09VVFBVVFBVTFNFKE9VVFBVVFBVTFNFKSAoKE9VVFBVVFBVTFNFKSA8PSAweDAwMDBGRkZGVSkKIAogI2RlZmluZSBJU19IUlRJTV9PVVRQVVRTRVQoT1VUUFVUU0VUKVwKLSAgICAgICAgICAgICAgKCgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfTk9ORSkgICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9SRVNZTkMpICAgICB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1RJTVBFUikgICAgIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNQ01QMSkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9USU1DTVAyKSAgICB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1RJTUNNUDMpICAgIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNQ01QNCkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9NQVNURVJQRVIpICB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX01BU1RFUkNNUDEpIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfTUFTVEVSQ01QMikgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9NQVNURVJDTVAzKSB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX01BU1RFUkNNUDQpIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfMSkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9USU1FVl8yKSAgICB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzMpICAgIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNCkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9USU1FVl81KSAgICB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzYpICAgIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNRVZfNykgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9USU1FVl84KSAgICB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1RJTUVWXzkpICAgIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfRUVWXzEpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9FRVZfMikgICAgICB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX0VFVl8zKSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfRUVWXzQpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9FRVZfNSkgICAgICB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX0VFVl82KSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfRUVWXzcpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9FRVZfOCkgICAgICB8fCBcCi0gICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX0VFVl85KSAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfRUVWXzEwKSAgICAgfHwgXAorICAgICAgICAgICAgICAoKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9OT05FKSAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1JFU1lOQykgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNUEVSKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9USU1DTVAxKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1RJTUNNUDIpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNQ01QMykgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9USU1DTVA0KSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX01BU1RFUlBFUikgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfTUFTVEVSQ01QMSkgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9NQVNURVJDTVAyKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX01BU1RFUkNNUDMpICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfTUFTVEVSQ01QNCkgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9USU1BRVYxX1RJTUJDTVAxKSB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1RJTUFFVjJfVElNQkNNUDIpIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNQUVWM19USU1DQ01QMikgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9USU1BRVY0X1RJTUNDTVAzKSB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1RJTUFFVjVfVElNRENNUDEpIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNQUVWNl9USU1EQ01QMikgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9USU1BRVY3X1RJTUVDTVAzKSB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1RJTUFFVjhfVElNRUNNUDQpIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfVElNQUVWOV9USU1GQ01QNCkgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9FRVZfMSkgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX0VFVl8yKSAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfRUVWXzMpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9FRVZfNCkgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX0VFVl81KSAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfRUVWXzYpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9FRVZfNykgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX0VFVl84KSAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICgoT1VUUFVUU0VUKSA9PSBIUlRJTV9PVVRQVVRTRVRfRUVWXzkpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRTRVQpID09IEhSVElNX09VVFBVVFNFVF9FRVZfMTApICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAoKE9VVFBVVFNFVCkgPT0gSFJUSU1fT1VUUFVUU0VUX1VQREFURSkpCiAKICNkZWZpbmUgSVNfSFJUSU1fT1VUUFVUUkVTRVQoT1VUUFVUUkVTRVQpXAotICAgICAgICAgICAgICAoKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTk9ORSkgICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfUkVTWU5DKSAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNUEVSKSAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQ01QMSkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQ01QMikgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQ01QMykgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQ01QNCkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSUEVSKSAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QMSkgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QMikgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QMykgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QNCkgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfMSkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfMikgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfMykgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNCkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNSkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNikgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfNykgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfOCkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNRVZfOSkgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzEpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzIpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzMpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzQpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzUpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzYpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzcpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzgpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzkpICAgICAgfHwgXAotICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzEwKSAgICAgfHwgXAorICAgICAgICAgICAgICAoKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTk9ORSkgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfUkVTWU5DKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNUEVSKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQ01QMSkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQ01QMikgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQ01QMykgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQ01QNCkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSUEVSKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QMSkgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QMikgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QMykgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfTUFTVEVSQ01QNCkgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWMV9USU1CQ01QMSkgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWMl9USU1CQ01QMikgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWM19USU1DQ01QMikgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWNF9USU1DQ01QMykgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWNV9USU1EQ01QMSkgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWNl9USU1EQ01QMikgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWN19USU1FQ01QMykgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWOF9USU1FQ01QNCkgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWOV9USU1GQ01QNCkgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzEpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzIpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzMpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzQpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzUpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzYpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzcpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzgpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzkpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfRUVWXzEwKSAgICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgKChPVVRQVVRSRVNFVCkgPT0gSFJUSU1fT1VUUFVUUkVTRVRfVVBEQVRFKSkKIAogI2RlZmluZSBJU19IUlRJTV9PVVRQVVRJRExFTU9ERShPVVRQVVRJRExFTU9ERSlcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9pMmMuaCBiL0luYy9zdG0zMmc0eHhfaGFsX2kyYy5oCmluZGV4IDhhZDI3M2YuLjE1OGQyZDAgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2kyYy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX2kyYy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX2kyY19leC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfaTJjX2V4LmgKaW5kZXggZmRlZTFmZC4uNjhhNDQzZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfaTJjX2V4LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfaTJjX2V4LmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfaTJzLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9pMnMuaAppbmRleCBiNzk1N2Y5Li44Y2YzYmU3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9pMnMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9pMnMuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0yNSwxMCArMjUsMTAgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFNQSV9JMlNfU1VQUE9SVCkKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJnNHh4X2hhbF9kZWYuaCIKIAorI2lmIGRlZmluZWQoU1BJX0kyU19TVVBQT1JUKQogLyoqIEBhZGR0b2dyb3VwIFNUTTMyRzR4eF9IQUxfRHJpdmVyCiAgICogQHsKICAgKi8KQEAgLTQ1NiwxNCArNDU2LDYgQEAKIC8qIFByaXZhdGUgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgSTJTX1ByaXZhdGVfQ29uc3RhbnRzIEkyUyBQcml2YXRlIENvbnN0YW50cwotICAqIEB7Ci0gICovCi0KLS8qKgotICAqIEB9Ci0gICovCi0KIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIEkyU19Qcml2YXRlX01hY3JvcyBJMlMgUHJpdmF0ZSBNYWNyb3MKICAgKiBAewpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfaXJkYS5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfaXJkYS5oCmluZGV4IGNkNmVmNzIuLmVkZjIyZjUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2lyZGEuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9pcmRhLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtMzAzLDcgKzMwMyw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBJUkRBX0Nsb2NrUHJlc2NhbGVyIENsb2NrIFByZXNjYWxlcgorLyoqIEBkZWZncm91cCBJUkRBX0Nsb2NrUHJlc2NhbGVyIElSREEgQ2xvY2sgUHJlc2NhbGVyCiAgICogQHsKICAgKi8KICNkZWZpbmUgSVJEQV9QUkVTQ0FMRVJfRElWMSAgICAweDAwMDAwMDAwVSAgLyohPCBmY2xrX3ByZXMgPSBmY2xrICAgICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfaXJkYV9leC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfaXJkYV9leC5oCmluZGV4IGY1Njk0ODYuLjYwM2Y3OGUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2lyZGFfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9pcmRhX2V4LmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtMzIsNyArMzIsOCBAQAogICAqIEB7CiAgICovCiAKLS8qKiBAYWRkdG9ncm91cCBJUkRBRXgKKy8qKiBAZGVmZ3JvdXAgSVJEQUV4IElSREFFeAorICAqIEBicmllZiBJUkRBIEV4dGVuZGVkIEhBTCBtb2R1bGUgZHJpdmVyCiAgICogQHsKICAgKi8KIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfaXdkZy5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfaXdkZy5oCmluZGV4IGY1NjNlYzIuLmRhMGM5NDYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX2l3ZGcuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9pd2RnLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfbHB0aW0uaCBiL0luYy9zdG0zMmc0eHhfaGFsX2xwdGltLmgKaW5kZXggYmZkY2Q3Ny4uZTNiZmQ1NSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfbHB0aW0uaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9scHRpbS5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNzE4LDcgKzcxOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPTEFSSVRZX18pID09IExQVElNX0NMT0NLUE9MQVJJVFlfRkFMTElORykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xBUklUWV9fKSA9PSBMUFRJTV9DTE9DS1BPTEFSSVRZX1JJU0lOR19GQUxMSU5HKSkKIAotI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkKICNkZWZpbmUgSVNfTFBUSU1fVFJHX1NPVVJDRShfX1RSSUdfXykgICAgICAgICAgICgoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1RSSUdfXykgPT0gTFBUSU1fVFJJR1NPVVJDRV8wKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1RSSUdfXykgPT0gTFBUSU1fVFJJR1NPVVJDRV8xKSB8fCBcCkBAIC03NDUsNyArNzQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzcpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzgpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVFJJR19fKSA9PSBMUFRJTV9UUklHU09VUkNFXzkpKQotI2VuZGlmIC8qIFNUTTMyRzQ3M3h4IHx8IFNUTTMyRzQ3NHh4IHx8IFNUTTMyRzQ4NHh4ICAqLworI2VuZGlmIC8qIFNUTTMyRzQ3M3h4IHx8IFNUTTMyRzQ4M3h4IHx8U1RNMzJHNDc0eHggfHwgU1RNMzJHNDg0eHggICovCiAKICNkZWZpbmUgSVNfTFBUSU1fRVhUX1RSR19QT0xBUklUWShfX1BPTEFSSVRZX18pICgoKF9fUE9MQVJJVFlfXykgPT0gTFBUSU1fQUNUSVZFRURHRV9SSVNJTkcgICAgICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9MQVJJVFlfXykgPT0gTFBUSU1fQUNUSVZFRURHRV9GQUxMSU5HICAgICAgICApIHx8IFwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX25hbmQuaCBiL0luYy9zdG0zMmc0eHhfaGFsX25hbmQuaAppbmRleCBmZDE0MmMyLi43ZjdlMzZhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9uYW5kLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfbmFuZC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX25vci5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfbm9yLmgKaW5kZXggMmFhYTM2My4uY2Y2ZDVjZiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfbm9yLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfbm9yLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfb3BhbXAuaCBiL0luYy9zdG0zMmc0eHhfaGFsX29wYW1wLmgKaW5kZXggNDM5ZmMwOS4uOGYxODVjMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfb3BhbXAuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9vcGFtcC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX29wYW1wX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9vcGFtcF9leC5oCmluZGV4IGU2MmFkYTYuLmE4OWMyY2EgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX29wYW1wX2V4LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfb3BhbXBfZXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC00OSw3ICs0OSw3IEBACiAKIC8qIEkvTyBvcGVyYXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9PUEFNUEV4X1NlbGZDYWxpYnJhdGVBbGwoT1BBTVBfSGFuZGxlVHlwZURlZiAqaG9wYW1wMSwgT1BBTVBfSGFuZGxlVHlwZURlZiAqaG9wYW1wMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BBTVBfSGFuZGxlVHlwZURlZiAqaG9wYW1wMywgT1BBTVBfSGFuZGxlVHlwZURlZiAqaG9wYW1wNCwgT1BBTVBfSGFuZGxlVHlwZURlZiAqaG9wYW1wNSwgT1BBTVBfSGFuZGxlVHlwZURlZiAqaG9wYW1wNik7CiAjZWxpZiBkZWZpbmVkKFNUTTMyR0JLMUNCKSB8fCBkZWZpbmVkKFNUTTMyRzQzMXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ0MXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3MXh4KQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfcGNkLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9wY2QuaAppbmRleCA4NTJkYzgwLi5jZTYwYThhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9wY2QuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9wY2QuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0xNTUsNyArMTU1LDcgQEAKIC8qKiBAZGVmZ3JvdXAgUENEX1NwZWVkIFBDRCBTcGVlZAogICAqIEB7CiAgICovCi0jZGVmaW5lIFBDRF9TUEVFRF9GVUxMICAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgUENEX1NQRUVEX0ZVTEwgICAgICAgICAgICAgICBVU0JEX0ZTX1NQRUVECiAvKioKICAgKiBAfQogICAqLwpAQCAtMjAwLDE1ICsyMDAsNiBAQAogCiAjZGVmaW5lIF9fSEFMX1VTQl9XQUtFVVBfRVhUSV9FTkFCTEVfSVQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUSS0+SU1SMSB8PSBVU0JfV0FLRVVQX0VYVElfTElORQogI2RlZmluZSBfX0hBTF9VU0JfV0FLRVVQX0VYVElfRElTQUJMRV9JVCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVEktPklNUjEgJj0gfihVU0JfV0FLRVVQX0VYVElfTElORSkKLSNkZWZpbmUgX19IQUxfVVNCX1dBS0VVUF9FWFRJX0dFVF9GTEFHKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5QUjEgJiAoVVNCX1dBS0VVUF9FWFRJX0xJTkUpCi0jZGVmaW5lIF9fSEFMX1VTQl9XQUtFVVBfRVhUSV9DTEVBUl9GTEFHKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUSS0+UFIxID0gVVNCX1dBS0VVUF9FWFRJX0xJTkUKLQotI2RlZmluZSBfX0hBTF9VU0JfV0FLRVVQX0VYVElfRU5BQkxFX1JJU0lOR19FREdFKCkgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5GVFNSMSAmPSB+KFVTQl9XQUtFVVBfRVhUSV9MSU5FKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJLT5SVFNSMSB8PSBVU0JfV0FLRVVQX0VYVElfTElORTsgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwVSkKLQogCiAKIC8qKgpAQCAtNzIzLDIwICs3MTQsMjAgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNkZWZpbmUgUENEX1NFVF9FUF9UWF9BRERSRVNTKFVTQngsIGJFcE51bSwgd0FkZHIpIGRvIHsgXAotICByZWdpc3RlciB1aW50MTZfdCAqX3dSZWdWYWw7IFwKKyAgcmVnaXN0ZXIgX19JTyB1aW50MTZfdCAqX3dSZWdWYWw7IFwKICAgcmVnaXN0ZXIgdWludDMyX3QgX3dSZWdCYXNlID0gKHVpbnQzMl90KVVTQng7IFwKICAgXAogICBfd1JlZ0Jhc2UgKz0gKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFOyBcCi0gIF93UmVnVmFsID0gKHVpbnQxNl90ICopKF93UmVnQmFzZSArIDB4NDAwVSArICgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICogUE1BX0FDQ0VTUykpOyBcCisgIF93UmVnVmFsID0gKF9fSU8gdWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKiBQTUFfQUNDRVNTKSk7IFwKICAgKl93UmVnVmFsID0gKCh3QWRkcikgPj4gMSkgPDwgMTsgXAogfSB3aGlsZSgwKSAvKiBQQ0RfU0VUX0VQX1RYX0FERFJFU1MgKi8KIAogI2RlZmluZSBQQ0RfU0VUX0VQX1JYX0FERFJFU1MoVVNCeCwgYkVwTnVtLCB3QWRkcikgZG8geyBcCi0gIHJlZ2lzdGVyIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAorICByZWdpc3RlciBfX0lPIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAogICByZWdpc3RlciB1aW50MzJfdCBfd1JlZ0Jhc2UgPSAodWludDMyX3QpVVNCeDsgXAogICBcCiAgIF93UmVnQmFzZSArPSAodWludDMyX3QpKFVTQngpLT5CVEFCTEU7IFwKLSAgX3dSZWdWYWwgPSAodWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgNFUpICogUE1BX0FDQ0VTUykpOyBcCisgIF93UmVnVmFsID0gKF9fSU8gdWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgNFUpICogUE1BX0FDQ0VTUykpOyBcCiAgICpfd1JlZ1ZhbCA9ICgod0FkZHIpID4+IDEpIDw8IDE7IFwKIH0gd2hpbGUoMCkgLyogUENEX1NFVF9FUF9SWF9BRERSRVNTICovCiAKQEAgLTc1OCw2ICs3NDksMTAgQEAKICAgKi8KICNkZWZpbmUgUENEX0NBTENfQkxLMzIocGR3UmVnLCB3Q291bnQsIHdOQmxvY2tzKSBkbyB7IFwKICAgICAod05CbG9ja3MpID0gKHdDb3VudCkgPj4gNTsgXAorICAgIGlmICgoKHdDb3VudCkgJiAweDFmVSkgPT0gMFUpIFwKKyAgICB7IFwKKyAgICAgICh3TkJsb2NrcyktLTsgXAorICAgIH0gXAogICAgICoocGR3UmVnKSA9ICh1aW50MTZfdCkoKCh3TkJsb2NrcykgPDwgMTApIHwgVVNCX0NOVFJYX0JMU0laRSk7IFwKICAgfSB3aGlsZSgwKSAvKiBQQ0RfQ0FMQ19CTEszMiAqLwogCkBAIC03NzcsMjIgKzc3MiwyMiBAQAogICAgICAgKihwZHdSZWcpICY9ICh1aW50MTZfdCl+VVNCX0NOVFJYX05CTEtfTVNLOyBcCiAgICAgICAqKHBkd1JlZykgfD0gVVNCX0NOVFJYX0JMU0laRTsgXAogICAgIH0gXAotICAgIGVsc2UgaWYoKHdDb3VudCkgPCA2MlUpIFwKKyAgICBlbHNlIGlmKCh3Q291bnQpIDw9IDYyVSkgXAogICAgIHsgXAogICAgICAgUENEX0NBTENfQkxLMigocGR3UmVnKSwgKHdDb3VudCksIHdOQmxvY2tzKTsgXAogICAgIH0gXAogICAgIGVsc2UgXAogICAgIHsgXAotICAgICAgUENEX0NBTENfQkxLMzIoKHBkd1JlZyksKHdDb3VudCksIHdOQmxvY2tzKTsgXAorICAgICAgUENEX0NBTENfQkxLMzIoKHBkd1JlZyksICh3Q291bnQpLCB3TkJsb2Nrcyk7IFwKICAgICB9IFwKICAgfSB3aGlsZSgwKSAvKiBQQ0RfU0VUX0VQX0NOVF9SWF9SRUcgKi8KIAogI2RlZmluZSBQQ0RfU0VUX0VQX1JYX0RCVUYwX0NOVChVU0J4LCBiRXBOdW0sIHdDb3VudCkgZG8geyBcCiAgICAgIHJlZ2lzdGVyIHVpbnQzMl90IF93UmVnQmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKLSAgICAgdWludDE2X3QgKnBkd1JlZzsgXAorICAgICByZWdpc3RlciBfX0lPIHVpbnQxNl90ICpwZHdSZWc7IFwKICAgICAgXAogICAgIF93UmVnQmFzZSArPSAodWludDMyX3QpKFVTQngpLT5CVEFCTEU7IFwKLSAgICBwZHdSZWcgPSAodWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgMlUpICogUE1BX0FDQ0VTUykpOyBcCisgICAgcGR3UmVnID0gKF9fSU8gdWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgMlUpICogUE1BX0FDQ0VTUykpOyBcCiAgICAgUENEX1NFVF9FUF9DTlRfUlhfUkVHKHBkd1JlZywgKHdDb3VudCkpOyBcCiAgIH0gd2hpbGUoMCkKIApAQCAtODA1LDE5ICs4MDAsMTkgQEAKICAgKi8KICNkZWZpbmUgUENEX1NFVF9FUF9UWF9DTlQoVVNCeCwgYkVwTnVtLCB3Q291bnQpIGRvIHsgXAogICAgIHJlZ2lzdGVyIHVpbnQzMl90IF93UmVnQmFzZSA9ICh1aW50MzJfdCkoVVNCeCk7IFwKLSAgICB1aW50MTZfdCAqX3dSZWdWYWw7IFwKKyAgICByZWdpc3RlciBfX0lPIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAogICAgIFwKICAgICBfd1JlZ0Jhc2UgKz0gKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFOyBcCi0gICAgX3dSZWdWYWwgPSAodWludDE2X3QgKikoX3dSZWdCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgMlUpICogUE1BX0FDQ0VTUykpOyBcCisgICAgX3dSZWdWYWwgPSAoX19JTyB1aW50MTZfdCAqKShfd1JlZ0Jhc2UgKyAweDQwMFUgKyAoKCgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKyAyVSkgKiBQTUFfQUNDRVNTKSk7IFwKICAgICAqX3dSZWdWYWwgPSAodWludDE2X3QpKHdDb3VudCk7IFwKIH0gd2hpbGUoMCkKIAogI2RlZmluZSBQQ0RfU0VUX0VQX1JYX0NOVChVU0J4LCBiRXBOdW0sIHdDb3VudCkgZG8geyBcCiAgICAgcmVnaXN0ZXIgdWludDMyX3QgX3dSZWdCYXNlID0gKHVpbnQzMl90KShVU0J4KTsgXAotICAgIHVpbnQxNl90ICpfd1JlZ1ZhbDsgXAorICAgIHJlZ2lzdGVyIF9fSU8gdWludDE2X3QgKl93UmVnVmFsOyBcCiAgICAgXAogICAgIF93UmVnQmFzZSArPSAodWludDMyX3QpKFVTQngpLT5CVEFCTEU7IFwKLSAgICBfd1JlZ1ZhbCA9ICh1aW50MTZfdCAqKShfd1JlZ0Jhc2UgKyAweDQwMFUgKyAoKCgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKyA2VSkgKiBQTUFfQUNDRVNTKSk7IFwKKyAgICBfd1JlZ1ZhbCA9IChfX0lPIHVpbnQxNl90ICopKF93UmVnQmFzZSArIDB4NDAwVSArICgoKCh1aW50MzJfdCkoYkVwTnVtKSAqIDhVKSArIDZVKSAqIFBNQV9BQ0NFU1MpKTsgXAogICAgIFBDRF9TRVRfRVBfQ05UX1JYX1JFRyhfd1JlZ1ZhbCwgKHdDb3VudCkpOyBcCiB9IHdoaWxlKDApCiAKQEAgLTg5Myw3ICs4ODgsNyBAQAogCiAjZGVmaW5lIFBDRF9TRVRfRVBfREJVRjFfQ05UKFVTQngsIGJFcE51bSwgYkRpciwgd0NvdW50KSBkbyB7IFwKICAgICByZWdpc3RlciB1aW50MzJfdCBfd0Jhc2UgPSAodWludDMyX3QpKFVTQngpOyBcCi0gICAgdWludDE2X3QgKl93RVBSZWdWYWw7IFwKKyAgICBfX0lPIHVpbnQxNl90ICpfd0VQUmVnVmFsOyBcCiAgICAgXAogICAgIGlmICgoYkRpcikgPT0gMFUpIFwKICAgICB7IFwKQEAgLTkwNiw3ICs5MDEsNyBAQAogICAgICAgeyBcCiAgICAgICAgIC8qIElOIGVuZHBvaW50ICovIFwKICAgICAgICAgX3dCYXNlICs9ICh1aW50MzJfdCkoVVNCeCktPkJUQUJMRTsgXAotICAgICAgICBfd0VQUmVnVmFsID0gKHVpbnQxNl90ICopKF93QmFzZSArIDB4NDAwVSArICgoKCh1aW50MzJfdCkoYkVwTnVtKSAqIDhVKSArIDZVKSAqIFBNQV9BQ0NFU1MpKTsgXAorICAgICAgICBfd0VQUmVnVmFsID0gKF9fSU8gdWludDE2X3QgKikoX3dCYXNlICsgMHg0MDBVICsgKCgoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgNlUpICogUE1BX0FDQ0VTUykpOyBcCiAgICAgICAgICpfd0VQUmVnVmFsID0gKHVpbnQxNl90KSh3Q291bnQpOyBcCiAgICAgICB9IFwKICAgICB9IFwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX3BjZF9leC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfcGNkX2V4LmgKaW5kZXggZjcwNjczOS4uZThjMWIyZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfcGNkX2V4LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfcGNkX2V4LmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfcHdyLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9wd3IuaAppbmRleCA3ODJjYWVkLi43NjM0NTU2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9wd3IuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9wd3IuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9wd3JfZXguaCBiL0luYy9zdG0zMmc0eHhfaGFsX3B3cl9leC5oCmluZGV4IDVhYWE1NDguLjZlMGFjOWUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX3B3cl9leC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3B3cl9leC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX3FzcGkuaCBiL0luYy9zdG0zMmc0eHhfaGFsX3FzcGkuaAppbmRleCBmZWI1MGIwLi40MzgyYWMzIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9xc3BpLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfcXNwaS5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX3JjYy5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfcmNjLmgKaW5kZXggMDdiMzA3ZS4uMjMyNjNiMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfcmNjLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfcmNjLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfcmNjX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9yY2NfZXguaAppbmRleCA3MzljMjVjLi44OTlkYmY3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9yY2NfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9yY2NfZXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0xMzM5LDcgKzEzMzksNyBAQAogICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19RU1BJKSAgICAgICAgPT0gUkNDX1BFUklQSENMS19RU1BJKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1JUQykgICAgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1JUQykpCiAKLSNlbGlmIGRlZmluZWQoU1RNMzJHNDczeHgpCisjZWxpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogCiAjZGVmaW5lIElTX1JDQ19QRVJJUEhDTE9DSyhfX1NFTEVDVElPTl9fKSAgXAogICAgICAgICAgICAgICAgKCgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19VU0FSVDEpICAgICAgPT0gUkNDX1BFUklQSENMS19VU0FSVDEpICB8fCBcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9ybmcuaCBiL0luYy9zdG0zMmc0eHhfaGFsX3JuZy5oCmluZGV4IDA4NjhhMDYuLmYxYTFmZTYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX3JuZy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3JuZy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTE3Niw3ICsxNzYsOSBAQAogI2RlZmluZSAgSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLIDB4MDAwMDAwMDFVICAgIC8qITwgSW52YWxpZCBDYWxsYmFjayBlcnJvciAgKi8KICNlbmRpZiAvKiBVU0VfSEFMX1JOR19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICNkZWZpbmUgIEhBTF9STkdfRVJST1JfVElNRU9VVCAgICAgICAgICAweDAwMDAwMDAyVSAgICAvKiE8IFRpbWVvdXQgZXJyb3IgICAgICAgICovCi0KKyNkZWZpbmUgIEhBTF9STkdfRVJST1JfQlVTWSAgICAgICAgICAgICAweDAwMDAwMDA0VSAgICAvKiE8IEJ1c3kgZXJyb3IgICAgICAgICovCisjZGVmaW5lICBIQUxfUk5HX0VSUk9SX1NFRUQgICAgICAgICAgICAgMHgwMDAwMDAwOFUgICAgLyohPCBTZWVkIGVycm9yICAgICAgICAqLworI2RlZmluZSAgSEFMX1JOR19FUlJPUl9DTE9DSyAgICAgICAgICAgIDB4MDAwMDAwMTBVICAgLyohPCBDbG9jayBlcnJvciAgICAgICAgKi8KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9ydGMuaCBiL0luYy9zdG0zMmc0eHhfaGFsX3J0Yy5oCmluZGV4IDI3YTJiM2MuLjVlNjY0NDMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX3J0Yy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3J0Yy5oCkBAIC00NjksMTAgKzQ2OSwxMCBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUlRDX0ludGVycnVwdGlvbl9NYXNrICAgIFJUQyBJbnRlcnJ1cHRpb25zIEZsYWcgTWFzaworLyoqIEBkZWZncm91cCBSVENfRmxhZ19NYXNrICAgIFJUQyBGbGFnIE1hc2sgKDViaXRzKSBkZXNjcmliZSBpbiBSVENfRmxhZ3NfRGVmaW5pdGlvbnMKICAgKiBAewogICAqLwotI2RlZmluZSBSVENfSVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUZVICAgICAgICAgICAgICAgICAgLyohPCBSVEMgaW50ZXJydXB0aW9ucyBmbGFncyBtYXNrICovCisjZGVmaW5lIFJUQ19GTEFHX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxRlUgICAgICAgICAgICAvKiE8IFJUQyBmbGFncyBtYXNrICg1Yml0cykgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC00ODIsMjQgKzQ4MiwyNCBAQAogICAqICAgICAgICAgICAtIFlZWVlZICA6IEludGVycnVwdCBmbGFnIHBvc2l0aW9uIGluIHRoZSBYWCByZWdpc3RlciAoNWJpdHMpCiAgICogICAgICAgICAgIC0gWFggIDogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAoMmJpdHMpCiAgICogICAgICAgICAgICAgICAgIC0gMDE6IElDU1IgcmVnaXN0ZXIKLSAgKiAgICAgICAgICAgICAgICAgLSAxMDogU1IgcmVnaXN0ZXIKKyAgKiAgICAgICAgICAgICAgICAgLSAxMDogU1Igb3IgU0NSIG9yIE1JU1IgcmVnaXN0ZXJzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgUlRDX0ZMQUdfUkVDQUxQRiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDExMFUgICAgLyohPCBSZWNhbGlicmF0aW9uIHBlbmRpbmcgRmxhZyAqLwotI2RlZmluZSBSVENfRkxBR19JTklURiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTA2VSAgICAvKiE8IEluaXRpYWxpemF0aW9uIGZsYWcgKi8KLSNkZWZpbmUgUlRDX0ZMQUdfUlNGICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNVUgICAgLyohPCBSZWdpc3RlcnMgc3luY2hyb25pemF0aW9uIGZsYWcgKi8KLSNkZWZpbmUgUlRDX0ZMQUdfSU5JVFMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNFUgICAgLyohPCBJbml0aWFsaXphdGlvbiBzdGF0dXMgZmxhZyAqLwotI2RlZmluZSBSVENfRkxBR19TSFBGICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAzVSAgICAvKiE8IFNoaWZ0IG9wZXJhdGlvbiBwZW5kaW5nIGZsYWcgKi8KLSNkZWZpbmUgUlRDX0ZMQUdfV1VUV0YgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMlUgICAgLyohPCBXYWtldXAgdGltZXIgd3JpdGUgZmxhZyAqLwotI2RlZmluZSBSVENfRkxBR19BTFJCV0YgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAxVSAgICAvKiE8IEFsYXJtIEIgd3JpdGUgZmxhZyAqLwotI2RlZmluZSBSVENfRkxBR19BTFJBV0YgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVSAgICAvKiE8IEFsYXJtIEEgd3JpdGUgZmxhZyAqLwotI2RlZmluZSBSVENfRkxBR19JVFNGICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA1VSAgICAvKiE8IENsZWFyIEludGVybmFsIFRpbWUtc3RhbXAgZmxhZyAqLwotI2RlZmluZSBSVENfRkxBR19UU09WRiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjA0VSAgICAvKiE8IENsZWFyIFRpbWUtc3RhbXAgb3ZlcmZsb3cgZmxhZyAqLwotI2RlZmluZSBSVENfRkxBR19UU0YgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAzVSAgICAvKiE8IENsZWFyIFRpbWUtc3RhbXAgZmxhZyAqLwotI2RlZmluZSBSVENfRkxBR19XVVRGICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAyVSAgICAvKiE8IENsZWFyIFdha2V1cCB0aW1lciBmbGFnICovCi0jZGVmaW5lIFJUQ19GTEFHX0FMUkJGICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDFVICAgIC8qITwgQ2xlYXIgQWxhcm0gQiBmbGFnICovCi0jZGVmaW5lIFJUQ19GTEFHX0FMUkFGICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVICAgIC8qITwgQ2xlYXIgQWxhcm0gQSBmbGFnICovCi0vKioKKyNkZWZpbmUgUlRDX0ZMQUdfUkVDQUxQRiAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDBVIHwgUlRDX0lDU1JfUkVDQUxQRl9Qb3MpIC8qITwgUmVjYWxpYnJhdGlvbiBwZW5kaW5nIEZsYWcgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfSU5JVEYgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDBVIHwgUlRDX0lDU1JfSU5JVEZfUG9zKSAgIC8qITwgSW5pdGlhbGl6YXRpb24gZmxhZyAqLworI2RlZmluZSBSVENfRkxBR19SU0YgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDEwMFUgfCBSVENfSUNTUl9SU0ZfUG9zKSAgICAgLyohPCBSZWdpc3RlcnMgc3luY2hyb25pemF0aW9uIGZsYWcgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfSU5JVFMgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDBVIHwgUlRDX0lDU1JfSU5JVFNfUG9zKSAgIC8qITwgSW5pdGlhbGl6YXRpb24gc3RhdHVzIGZsYWcgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfU0hQRiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDBVIHwgUlRDX0lDU1JfU0hQRl9Qb3MpICAgIC8qITwgU2hpZnQgb3BlcmF0aW9uIHBlbmRpbmcgZmxhZyAqLworI2RlZmluZSBSVENfRkxBR19XVVRXRiAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDEwMFUgfCBSVENfSUNTUl9XVVRXRl9Qb3MpICAgLyohPCBXYWtldXAgdGltZXIgd3JpdGUgZmxhZyAqLworI2RlZmluZSBSVENfRkxBR19BTFJCV0YgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDEwMFUgfCBSVENfSUNTUl9BTFJCV0ZfUG9zKSAgLyohPCBBbGFybSBCIHdyaXRlIGZsYWcgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfQUxSQVdGICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDBVIHwgUlRDX0lDU1JfQUxSQVdGX1BvcykgIC8qITwgQWxhcm0gQSB3cml0ZSBmbGFnICovCisjZGVmaW5lIFJUQ19GTEFHX0lUU0YgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMjAwVSB8IFJUQ19TUl9JVFNGX1BvcykgICAgICAvKiE8IEludGVybmFsIFRpbWUtc3RhbXAgZmxhZyAqLworI2RlZmluZSBSVENfRkxBR19UU09WRiAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMFUgfCBSVENfU1JfVFNPVkZfUG9zKSAgICAgLyohPCBUaW1lLXN0YW1wIG92ZXJmbG93IGZsYWcgKi8KKyNkZWZpbmUgUlRDX0ZMQUdfVFNGICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAyMDBVIHwgUlRDX1NSX1RTRl9Qb3MpICAgICAgIC8qITwgVGltZS1zdGFtcCBmbGFnICovCisjZGVmaW5lIFJUQ19GTEFHX1dVVEYgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMjAwVSB8IFJUQ19TUl9XVVRGX1BvcykgICAgICAvKiE8IFdha2V1cCB0aW1lciBmbGFnICovCisjZGVmaW5lIFJUQ19GTEFHX0FMUkJGICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMjAwVSB8IFJUQ19TUl9BTFJCRl9Qb3MpICAgICAvKiE8IEFsYXJtIEIgZmxhZyAqLworI2RlZmluZSBSVENfRkxBR19BTFJBRiAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDIwMFUgfCBSVENfU1JfQUxSQUZfUG9zKSAgICAgLyohPCBBbGFybSBBIGZsYWcgKi8KKyAvKioKICAgKiBAfQogICAqLwogCkBAIC05ODIsNiArOTgyLDcgQEAKICAgKiBAewogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgIFJUQ19FbnRlckluaXRNb2RlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKK0hBTF9TdGF0dXNUeXBlRGVmICBSVENfRXhpdEluaXRNb2RlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKIHVpbnQ4X3QgICAgICAgICAgICBSVENfQnl0ZVRvQmNkMih1aW50OF90IFZhbHVlKTsKIHVpbnQ4X3QgICAgICAgICAgICBSVENfQmNkMlRvQnl0ZSh1aW50OF90IFZhbHVlKTsKIC8qKgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfcnRjX2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF9ydGNfZXguaAppbmRleCA0OTRjM2FkLi4wZmVmYzhmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9ydGNfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9ydGNfZXguaApAQCAtNTc1LDggKzU3NSw4IEBACiAgICogICAgICAgICAgICBAYXJnIEByZWYgUlRDX0ZMQUdfQUxSQUYgICAgICAgICAgICAgICBBbGFybSBBIGZsYWcKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLSNkZWZpbmUgX19IQUxfUlRDX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAoKCgoKF9fRkxBR19fKSkgPj4gOFUpID09IDFVKSA/IChSVEMtPklDU1IgJiAoMVUgPDwgKCgodWludDE2X3QpKF9fRkxBR19fKSkgJiBSVENfSVRfTUFTSykpKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJUQy0+U1IgJiAoMVUgPDwgKCgodWludDE2X3QpKF9fRkxBR19fKSkgJiBSVENfSVRfTUFTSykpKSkKKyNkZWZpbmUgX19IQUxfUlRDX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAoKCgoKF9fRkxBR19fKSkgPj4gOFUpID09IDFVKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JQ1NSICYgKDFVIDw8ICgoKHVpbnQxNl90KShfX0ZMQUdfXykpICYgUlRDX0ZMQUdfTUFTSykpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlNSICYgKDFVIDw8ICgoKHVpbnQxNl90KShfX0ZMQUdfXykpICYgUlRDX0ZMQUdfTUFTSykpKSkKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tV0FLRVVQVElNRVItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBSVENFeF9XYWtlVXBfVGltZXIgUlRDIFdha2VVcCBUaW1lcgpAQCAtNzkyLDggKzc5Miw3IEBACiAgICogICAgICAgICAgICAgQGFyZyBAcmVmIFJUQ19GTEFHX1RTT1ZGCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jZGVmaW5lIF9fSEFMX1JUQ19USU1FU1RBTVBfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgKCgoX19GTEFHX18pID09IFJUQ19GTEFHX1RTRikgPyAoX19IQUxfUlRDX0NMRUFSX0ZMQUcoKF9fSEFORExFX18pLCBSVENfQ0xFQVJfVFNGKSkgOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTF9SVENfQ0xFQVJfRkxBRygoX19IQU5ETEVfXyksIFJUQ19DTEVBUl9UU09WRikpKQorI2RlZmluZSBfX0hBTF9SVENfVElNRVNUQU1QX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICAgKF9fSEFMX1JUQ19DTEVBUl9GTEFHKChfX0hBTkRMRV9fKSwgKF9fRkxBR19fKSkpCiAKIC8qIFRJTUVTVEFNUCBUSU1FUiBFWFRJICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfc2FpLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9zYWkuaAppbmRleCBmMjMzNTc5Li4zNmQ5YjE4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9zYWkuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9zYWkuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9zYWlfZXguaCBiL0luYy9zdG0zMmc0eHhfaGFsX3NhaV9leC5oCmluZGV4IGMyNWM0NTYuLjJlMDgyOWQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX3NhaV9leC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3NhaV9leC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX3NtYXJ0Y2FyZC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfc21hcnRjYXJkLmgKaW5kZXggMjViNzgxOC4uNDAwMjhiOSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfc21hcnRjYXJkLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfc21hcnRjYXJkLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNDQwLDcgKzQ0MCw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBTTUFSVENBUkRfQ2xvY2tQcmVzY2FsZXIgIENsb2NrIFByZXNjYWxlcgorLyoqIEBkZWZncm91cCBTTUFSVENBUkRfQ2xvY2tQcmVzY2FsZXIgIFNNQVJUQ0FSRCBDbG9jayBQcmVzY2FsZXIKICAgKiBAewogICAqLwogI2RlZmluZSBTTUFSVENBUkRfUFJFU0NBTEVSX0RJVjEgICAgMHgwMDAwMDAwMFUgIC8qITwgZmNsa19wcmVzID0gZmNsayAgICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX3NtYXJ0Y2FyZF9leC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfc21hcnRjYXJkX2V4LmgKaW5kZXggNDE3OWMyMi4uOWZkZDcxZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfc21hcnRjYXJkX2V4LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfc21hcnRjYXJkX2V4LmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNjgsNyArNjgsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgU01BUlRDQVJERXhfRklGT19tb2RlIFNNQVJUQ0FSREV4IEZJRk8gbW9kZQorLyoqIEBkZWZncm91cCBTTUFSVENBUkRFeF9GSUZPX21vZGUgU01BUlRDQVJEIEZJRk8gbW9kZQogICAqIEBicmllZiAgICBTTUFSVENBUkQgRklGTyBtb2RlCiAgICogQHsKICAgKi8KQEAgLTc4LDcgKzc4LDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFNNQVJUQ0FSREV4X1RYRklGT190aHJlc2hvbGRfbGV2ZWwgU01BUlRDQVJERXggVFhGSUZPIHRocmVzaG9sZCBsZXZlbAorLyoqIEBkZWZncm91cCBTTUFSVENBUkRFeF9UWEZJRk9fdGhyZXNob2xkX2xldmVsIFNNQVJUQ0FSRCBUWEZJRk8gdGhyZXNob2xkIGxldmVsCiAgICogQGJyaWVmICAgIFNNQVJUQ0FSRCBUWEZJRk8gbGV2ZWwKICAgKiBAewogICAqLwpAQCAtOTIsNyArOTIsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgU01BUlRDQVJERXhfUlhGSUZPX3RocmVzaG9sZF9sZXZlbCBTTUFSVENBUkRFeCBSWEZJRk8gdGhyZXNob2xkIGxldmVsCisvKiogQGRlZmdyb3VwIFNNQVJUQ0FSREV4X1JYRklGT190aHJlc2hvbGRfbGV2ZWwgU01BUlRDQVJEIFJYRklGTyB0aHJlc2hvbGQgbGV2ZWwKICAgKiBAYnJpZWYgICAgU01BUlRDQVJEIFJYRklGTyBsZXZlbAogICAqIEB7CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9zbWJ1cy5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfc21idXMuaAppbmRleCBkYjAxYTBhLi5jM2FiZGI2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9zbWJ1cy5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3NtYnVzLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfc3BpLmggYi9JbmMvc3RtMzJnNHh4X2hhbF9zcGkuaAppbmRleCA3ZTJmNjFlLi42YzU5NDBhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9zcGkuaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF9zcGkuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF9zcGlfZXguaCBiL0luYy9zdG0zMmc0eHhfaGFsX3NwaV9leC5oCmluZGV4IDE0M2E0YjEuLjgzNTEyMzggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX3NwaV9leC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3NwaV9leC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX3NyYW0uaCBiL0luYy9zdG0zMmc0eHhfaGFsX3NyYW0uaAppbmRleCA1OGNhZmQzLi45MGM2NzRkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF9zcmFtLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfc3JhbS5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX3RpbS5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfdGltLmgKaW5kZXggZjAxY2RhYS4uZmNmMDk1MCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfdGltLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfdGltLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtMjQyLDcgKzI0MiwxMiBAQAogICB1aW50MzJfdCAgTWFzdGVyT3V0cHV0VHJpZ2dlcjI7ICAvKiE8IFRyaWdnZXIgb3V0cHV0MiAoVFJHTzIpIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX01hc3Rlcl9Nb2RlX1NlbGVjdGlvbl8yICovCiAgIHVpbnQzMl90ICBNYXN0ZXJTbGF2ZU1vZGU7ICAgICAgIC8qITwgTWFzdGVyL3NsYXZlIG1vZGUgc2VsZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fTWFzdGVyX1NsYXZlX01vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9NYXN0ZXJfU2xhdmVfTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFdoZW4gdGhlIE1hc3Rlci9zbGF2ZSBtb2RlIGlzIGVuYWJsZWQsIHRoZSBlZmZlY3Qgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBldmVudCBvbiB0aGUgdHJpZ2dlciBpbnB1dCAoVFJHSSkgaXMgZGVsYXllZCB0byBhbGxvdyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgY3VycmVudCB0aW1lciBhbmQgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVzICh0aHJvdWdoIFRSR08pLiBJdCBpcyBub3QgbWFuZGF0b3J5IGluIGNhc2Ugb2YgdGltZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6YXRpb24gbW9kZS4gKi8KIH0gVElNX01hc3RlckNvbmZpZ1R5cGVEZWY7CiAKIC8qKgpAQCAtMTYyMSwxMiArMTYyNiw2MiBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9USU1fRElTQUJMRV9PQ3hQUkVMT0FEKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSAgICBcCi0gICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSAmPSAodWludDE2X3QpflRJTV9DQ01SMV9PQzFQRSkgOlwKLSAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxICY9ICh1aW50MTZfdCl+VElNX0NDTVIxX09DMlBFKSA6XAotICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjJfT0MzUEUpIDpcCi0gICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF80KSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMiAmPSAodWludDE2X3QpflRJTV9DQ01SMl9PQzRQRSkgOlwKLSAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzUpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIzICY9ICh1aW50MTZfdCl+VElNX0NDTVIzX09DNVBFKSA6XAotICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIzICY9ICh1aW50MTZfdCl+VElNX0NDTVIzX09DNlBFKSkKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxICY9IH5USU1fQ0NNUjFfT0MxUEUpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSAmPSB+VElNX0NDTVIxX09DMlBFKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gflRJTV9DQ01SMl9PQzNQRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzQpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyICY9IH5USU1fQ0NNUjJfT0M0UEUpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF81KSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMyAmPSB+VElNX0NDTVIzX09DNVBFKSA6XAorICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIzICY9IH5USU1fQ0NNUjNfT0M2UEUpKQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBmYXN0IG1vZGUgZm9yIGEgZ2l2ZW4gY2hhbm5lbC4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gVElNIGhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fQ0hBTk5FTF9fIFRJTSBDaGFubmVscyB0byBiZSBjb25maWd1cmVkLgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzE6IFRJTSBDaGFubmVsIDEgc2VsZWN0ZWQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMjogVElNIENoYW5uZWwgMiBzZWxlY3RlZAorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8zOiBUSU0gQ2hhbm5lbCAzIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzQ6IFRJTSBDaGFubmVsIDQgc2VsZWN0ZWQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfNTogVElNIENoYW5uZWwgNSBzZWxlY3RlZAorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF82OiBUSU0gQ2hhbm5lbCA2IHNlbGVjdGVkCisgICogQG5vdGUgIFdoZW4gZmFzdCBtb2RlIGlzIGVuYWJsZWQgYW4gYWN0aXZlIGVkZ2Ugb24gdGhlIHRyaWdnZXIgaW5wdXQgYWN0cworICAqICAgICAgICBsaWtlIGEgY29tcGFyZSBtYXRjaCBvbiBDQ3ggb3V0cHV0LiBEZWxheSB0byBzYW1wbGUgdGhlIHRyaWdnZXIKKyAgKiAgICAgICAgaW5wdXQgYW5kIHRvIGFjdGl2YXRlIENDeCBvdXRwdXQgaXMgcmVkdWNlZCB0byAzIGNsb2NrIGN5Y2xlcy4KKyAgKiBAbm90ZSAgRmFzdCBtb2RlIGFjdHMgb25seSBpZiB0aGUgY2hhbm5lbCBpcyBjb25maWd1cmVkIGluIFBXTTEgb3IgUFdNMiBtb2RlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9USU1fRU5BQkxFX09DeEZBU1QoX19IQU5ETEVfXywgX19DSEFOTkVMX18pICAgIFwKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxIHw9IFRJTV9DQ01SMV9PQzFGRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxIHw9IFRJTV9DQ01SMV9PQzJGRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyIHw9IFRJTV9DQ01SMl9PQzNGRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzQpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyIHw9IFRJTV9DQ01SMl9PQzRGRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzUpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIzIHw9IFRJTV9DQ01SM19PQzVGRSkgOlwKKyAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMyB8PSBUSU1fQ0NNUjNfT0M2RkUpKQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgZmFzdCBtb2RlIGZvciBhIGdpdmVuIGNoYW5uZWwuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIFRJTSBoYW5kbGUuCisgICogQHBhcmFtICBfX0NIQU5ORUxfXyBUSU0gQ2hhbm5lbHMgdG8gYmUgY29uZmlndXJlZC4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8xOiBUSU0gQ2hhbm5lbCAxIHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzI6IFRJTSBDaGFubmVsIDIgc2VsZWN0ZWQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMzogVElNIENoYW5uZWwgMyBzZWxlY3RlZAorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF80OiBUSU0gQ2hhbm5lbCA0IHNlbGVjdGVkCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzU6IFRJTSBDaGFubmVsIDUgc2VsZWN0ZWQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfNjogVElNIENoYW5uZWwgNiBzZWxlY3RlZAorICAqIEBub3RlICBXaGVuIGZhc3QgbW9kZSBpcyBkaXNhYmxlZCBDQ3ggb3V0cHV0IGJlaGF2ZXMgbm9ybWFsbHkgZGVwZW5kaW5nCisgICogICAgICAgIG9uIGNvdW50ZXIgYW5kIENDUnggdmFsdWVzIGV2ZW4gd2hlbiB0aGUgdHJpZ2dlciBpcyBPTi4gVGhlIG1pbmltdW0KKyAgKiAgICAgICAgZGVsYXkgdG8gYWN0aXZhdGUgQ0N4IG91dHB1dCB3aGVuIGFuIGFjdGl2ZSBlZGdlIG9jY3VycyBvbiB0aGUKKyAgKiAgICAgICAgdHJpZ2dlciBpbnB1dCBpcyA1IGNsb2NrIGN5Y2xlcy4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgX19IQUxfVElNX0RJU0FCTEVfT0N4RkFTVChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXykgICAgXAorICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjEgJj0gflRJTV9DQ01SMV9PQzFGRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxICY9IH5USU1fQ0NNUjFfT0MyRkUpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMiAmPSB+VElNX0NDTVIyX09DM0ZFKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfNCkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gflRJTV9DQ01SMl9PQzRGRSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzUpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIzICY9IH5USU1fQ0NNUjNfT0M1RkUpIDpcCisgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjMgJj0gflRJTV9DQ01SM19PQzZGRSkpCiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBVcGRhdGUgUmVxdWVzdCBTb3VyY2UgKFVSUykgYml0IG9mIHRoZSBUSU14X0NSMSByZWdpc3Rlci4KQEAgLTIxNDMsMTAgKzIxOTgsMTAgQEAKICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMiB8PSAoKF9fSUNQU0NfXykgPDwgOFUpKSkKIAogI2RlZmluZSBUSU1fUkVTRVRfSUNQUkVTQ0FMRVJWQUxVRShfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXykgXAotICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjEgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfSUMxUFNDKSA6XAotICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjEgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfSUMyUFNDKSA6XAotICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjJfSUMzUFNDKSA6XAotICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIyICY9ICh1aW50MTZfdCl+VElNX0NDTVIyX0lDNFBTQykpCisgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ01SMSAmPSB+VElNX0NDTVIxX0lDMVBTQykgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDTVIxICY9IH5USU1fQ0NNUjFfSUMyUFNDKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gflRJTV9DQ01SMl9JQzNQU0MpIDpcCisgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NNUjIgJj0gflRJTV9DQ01SMl9JQzRQU0MpKQogCiAjZGVmaW5lIFRJTV9TRVRfQ0FQVFVSRVBPTEFSSVRZKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fLCBfX1BPTEFSSVRZX18pIFwKICAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgfD0gKF9fUE9MQVJJVFlfXykpIDpcCkBAIC0yMTU1LDEwICsyMjEwLDEwIEBACiAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiB8PSAoKChfX1BPTEFSSVRZX18pIDw8IDEyVSkpKSkKIAogI2RlZmluZSBUSU1fUkVTRVRfQ0FQVFVSRVBPTEFSSVRZKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fKSBcCi0gICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9ICh1aW50MTZfdCl+KFRJTV9DQ0VSX0NDMVAgfCBUSU1fQ0NFUl9DQzFOUCkpIDpcCi0gICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9ICh1aW50MTZfdCl+KFRJTV9DQ0VSX0NDMlAgfCBUSU1fQ0NFUl9DQzJOUCkpIDpcCi0gICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9ICh1aW50MTZfdCl+KFRJTV9DQ0VSX0NDM1AgfCBUSU1fQ0NFUl9DQzNOUCkpIDpcCi0gICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiAmPSAodWludDE2X3QpfihUSU1fQ0NFUl9DQzRQIHwgVElNX0NDRVJfQ0M0TlApKSkKKyAgKCgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzEpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNDRVIgJj0gfihUSU1fQ0NFUl9DQzFQIHwgVElNX0NDRVJfQ0MxTlApKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiAmPSB+KFRJTV9DQ0VSX0NDMlAgfCBUSU1fQ0NFUl9DQzJOUCkpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9IH4oVElNX0NDRVJfQ0MzUCB8IFRJTV9DQ0VSX0NDM05QKSkgOlwKKyAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DQ0VSICY9IH4oVElNX0NDRVJfQ0M0UCB8IFRJTV9DQ0VSX0NDNE5QKSkpCiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF90aW1fZXguaCBiL0luYy9zdG0zMmc0eHhfaGFsX3RpbV9leC5oCmluZGV4IGE4ZGFiZGEuLjJkYjg0ODEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfaGFsX3RpbV9leC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3RpbV9leC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTgwLDkgKzgwLDkgQEAKIHR5cGVkZWYgc3RydWN0CiB7CiAgIHVpbnQzMl90IFBvbGFyaXR5OyAgICAgICAgICAgICAgICAgIC8qITwgVElNIEVuY29kZXIgaW5kZXggcG9sYXJpdHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fRW5jb2Rlcl9JbmRleF9Qb2xhcml0eSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNRXhfRW5jb2Rlcl9JbmRleF9Qb2xhcml0eSAqLwogICB1aW50MzJfdCBQcmVzY2FsZXI7ICAgICAgICAgICAgICAgICAvKiE8IFRJTSBFbmNvZGVyIGluZGV4IHByZXNjYWxlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9FbmNvZGVyX0luZGV4X1ByZXNjYWxlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNRXhfRW5jb2Rlcl9JbmRleF9QcmVzY2FsZXIgKi8KICAgdWludDMyX3QgRmlsdGVyOyAgICAgICAgICAgICAgICAgICAgLyohPCBUSU0gRW5jb2RlciBpbmRleCBmaWx0ZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAgYW5kIE1heF9EYXRhID0gMHhGICovCiAgIEZ1bmN0aW9uYWxTdGF0ZSAgRmlyc3RJbmRleEVuYWJsZTsgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBlbmNvZGVyIGZpcnN0IGluZGV4IGlzIGVuYWJsZWQuCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF91YXJ0LmggYi9JbmMvc3RtMzJnNHh4X2hhbF91YXJ0LmgKaW5kZXggZjY2N2M3YS4uMDAyZDM1YSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfdWFydC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3VhcnQuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF91YXJ0X2V4LmggYi9JbmMvc3RtMzJnNHh4X2hhbF91YXJ0X2V4LmgKaW5kZXggMzFmYzMwZC4uZjM1ODJiZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfdWFydF9leC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3VhcnRfZXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2hhbF91c2FydC5oIGIvSW5jL3N0bTMyZzR4eF9oYWxfdXNhcnQuaAppbmRleCBjMTQwZjc4Li40ZTk0YWE0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF91c2FydC5oCisrKyBiL0luYy9zdG0zMmc0eHhfaGFsX3VzYXJ0LmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9oYWxfdXNhcnRfZXguaCBiL0luYy9zdG0zMmc0eHhfaGFsX3VzYXJ0X2V4LmgKaW5kZXggZTA0Y2EwZS4uYmU0NWU2MCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9oYWxfdXNhcnRfZXguaAorKysgYi9JbmMvc3RtMzJnNHh4X2hhbF91c2FydF9leC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfaGFsX3d3ZGcuaCBiL0luYy9zdG0zMmc0eHhfaGFsX3d3ZGcuaAppbmRleCBjYWQyOTUzLi4wMjk5ZDdmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2hhbF93d2RnLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9oYWxfd3dkZy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgU1RNMzJHNHh4X0hBTF9XV0RHX0gKIAogI2lmZGVmIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7CitleHRlcm4gIkMiIHsKICNlbmRpZgogCiAvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtODksMTIgKzg5LDEyIEBACiB7CiAgIEhBTF9XV0RHX0VXSV9DQl9JRCAgICAgICAgICA9IDB4MDB1LCAgICAvKiE8IFdXREcgRVdJIGNhbGxiYWNrIElEICovCiAgIEhBTF9XV0RHX01TUElOSVRfQ0JfSUQgICAgICA9IDB4MDF1LCAgICAvKiE8IFdXREcgTXNwSW5pdCBjYWxsYmFjayBJRCAqLwotfUhBTF9XV0RHX0NhbGxiYWNrSURUeXBlRGVmOworfSBIQUxfV1dER19DYWxsYmFja0lEVHlwZURlZjsKIAogLyoqCiAgICogQGJyaWVmICBIQUwgV1dERyBDYWxsYmFjayBwb2ludGVyIGRlZmluaXRpb24KICAgKi8KLXR5cGVkZWYgdm9pZCAoKnBXV0RHX0NhbGxiYWNrVHlwZURlZikoV1dER19IYW5kbGVUeXBlRGVmICogaHBwcCk7IC8qITwgcG9pbnRlciB0byBhIFdXREcgY29tbW9uIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwordHlwZWRlZiB2b2lkICgqcFdXREdfQ2FsbGJhY2tUeXBlRGVmKShXV0RHX0hhbmRsZVR5cGVEZWYgKmhwcHApOyAgLyohPCBwb2ludGVyIHRvIGEgV1dERyBjb21tb24gY2FsbGJhY2sgZnVuY3Rpb25zICovCiAKICNlbmRpZgogLyoqCkBAIC0yNDcsNyArMjQ3LDggQEAKICAgKiAgICAgICAgICAgIEBhcmcgV1dER19JVF9FV0k6IEVhcmx5IFdha2V1cCBJbnRlcnJ1cHQKICAgKiBAcmV0dmFsIHN0YXRlIG9mIF9fSU5URVJSVVBUX18gKFRSVUUgb3IgRkFMU0UpLgogICAqLwotI2RlZmluZSBfX0hBTF9XV0RHX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DRlIgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkKKyNkZWZpbmUgX19IQUxfV1dER19HRVRfSVRfU09VUkNFKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0ZSXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIChfX0lOVEVSUlVQVF9fKSkgPT0gKF9fSU5URVJSVVBUX18pKQogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9hZGMuaCBiL0luYy9zdG0zMmc0eHhfbGxfYWRjLmgKaW5kZXggMDEwM2VhNC4uZjY4NzBjOSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9hZGMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2FkYy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTE4OTQsNyArMTg5NCw3IEBACiAgICogQHJldHZhbCBWYWx1ZSAiMCIgaWYgdGhlIGludGVybmFsIGNoYW5uZWwgc2VsZWN0ZWQgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgQURDIGluc3RhbmNlIHNlbGVjdGVkLgogICAqICAgICAgICAgVmFsdWUgIjEiIGlmIHRoZSBpbnRlcm5hbCBjaGFubmVsIHNlbGVjdGVkIGlzIGF2YWlsYWJsZSBvbiB0aGUgQURDIGluc3RhbmNlIHNlbGVjdGVkLgogICAqLwotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICNkZWZpbmUgX19MTF9BRENfSVNfQ0hBTk5FTF9JTlRFUk5BTF9BVkFJTEFCTEUoX19BRENfSU5TVEFOQ0VfXywgX19DSEFOTkVMX18pICBcCiAgICgoKChfX0FEQ19JTlNUQU5DRV9fKSA9PSBBREMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICYmKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE5MzcsNyArMTkzNywzMyBAQAogICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKLSNlbGlmIGRlZmluZWQoU1RNMzJHQksxQ0IpIHx8IGRlZmluZWQoU1RNMzJHNDMxeHgpIHx8IGRlZmluZWQoU1RNMzJHNDQxeHgpIHx8IGRlZmluZWQoU1RNMzJHNDcxeHgpCisjZWxpZiBkZWZpbmVkKFNUTTMyRzQ3MXh4KQorI2RlZmluZSBfX0xMX0FEQ19JU19DSEFOTkVMX0lOVEVSTkFMX0FWQUlMQUJMRShfX0FEQ19JTlNUQU5DRV9fLCBfX0NIQU5ORUxfXykgIFwKKyAgKCgoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJiYoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZPUEFNUDEpICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9URU1QU0VOU09SX0FEQzEpIHx8ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVkJBVCkgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICgoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgJiYoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZPUEFNUDIpICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9WT1BBTVAzX0FEQzIpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAoKChfX0FEQ19JTlNUQU5DRV9fKSA9PSBBREMzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICYmKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAoKF9fQ0hBTk5FTF9fKSA9PSBMTF9BRENfQ0hBTk5FTF9WT1BBTVAzX0FEQzMpICAgIHx8ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgKChfX0NIQU5ORUxfXykgPT0gTExfQURDX0NIQU5ORUxfVkJBVCkgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICgoX19DSEFOTkVMX18pID09IExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICApCisjZWxpZiBkZWZpbmVkKFNUTTMyR0JLMUNCKSB8fCBkZWZpbmVkKFNUTTMyRzQzMXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ0MXh4KQogI2RlZmluZSBfX0xMX0FEQ19JU19DSEFOTkVMX0lOVEVSTkFMX0FWQUlMQUJMRShfX0FEQ19JTlNUQU5DRV9fLCBfX0NIQU5ORUxfXykgIFwKICAgKCgoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgJiYoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjMwNCw2ICsyMzMwLDcgQEAKICAgKiAgICAgICAgIGlzIGVuYWJsZWQuCiAgICovCiAjaWYgZGVmaW5lZChBREMzNDVfQ09NTU9OKQorI2lmIGRlZmluZWQoQURDNCkgJiYgIGRlZmluZWQoQURDNSkKICNkZWZpbmUgX19MTF9BRENfSVNfRU5BQkxFRF9BTExfQ09NTU9OX0lOU1RBTkNFKF9fQURDWFlfQ09NTU9OX18pICAgICAgICAgICAgICBcCiAgICgoKF9fQURDWFlfQ09NTU9OX18pID09IEFEQzEyX0NPTU1PTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgID8gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTIzMTksNiArMjM0NiwxNyBAQAogICApCiAjZWxzZQogI2RlZmluZSBfX0xMX0FEQ19JU19FTkFCTEVEX0FMTF9DT01NT05fSU5TVEFOQ0UoX19BRENYWV9DT01NT05fXykgICAgICAgICAgICAgIFwKKyAgKCgoX19BRENYWV9DT01NT05fXykgPT0gQURDMTJfQ09NTU9OKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgPyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIChMTF9BRENfSXNFbmFibGVkKEFEQzEpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTExfQURDX0lzRW5hYmxlZChBREMyKSAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChMTF9BRENfSXNFbmFibGVkKEFEQzMpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICkKKyNlbmRpZiAvKiBBREM0ICYmIEFEQzUgKi8KKyNlbHNlCisjZGVmaW5lIF9fTExfQURDX0lTX0VOQUJMRURfQUxMX0NPTU1PTl9JTlNUQU5DRShfX0FEQ1hZX0NPTU1PTl9fKSAgICAgICAgICAgICAgXAogICAoTExfQURDX0lzRW5hYmxlZChBREMxKSB8IExMX0FEQ19Jc0VuYWJsZWQoQURDMikpCiAjZW5kaWYKIApAQCAtNTA3MCw3ICs1MTA4LDcgQEAKICAgICAgICAgICAgICBBRENfSlNRUl9KU1EyICAgIHwKICAgICAgICAgICAgICBBRENfSlNRUl9KU1ExICAgIHwKICAgICAgICAgICAgICBBRENfSlNRUl9KTCwKLSAgICAgICAgICAgICBUcmlnZ2VyU291cmNlICAgICAgIHwKKyAgICAgICAgICAgICAoVHJpZ2dlclNvdXJjZSAmIEFEQ19KU1FSX0pFWFRTRUwpICAgICAgICAgIHwKICAgICAgICAgICAgICAoRXh0ZXJuYWxUcmlnZ2VyRWRnZSAqIChpc190cmlnZ2VyX25vdF9zdykpIHwKICAgICAgICAgICAgICAoKChSYW5rNF9DaGFubmVsICYgQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0spID4+IEFEQ19DSEFOTkVMX0lEX05VTUJFUl9CSVRPRkZTRVRfUE9TKSA8PCAoTExfQURDX0lOSl9SQU5LXzQgJiBBRENfSU5KX1JBTktfSURfSlNRUl9NQVNLKSkgfAogICAgICAgICAgICAgICgoKFJhbmszX0NoYW5uZWwgJiBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSykgPj4gQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MpIDw8IChMTF9BRENfSU5KX1JBTktfMyAmIEFEQ19JTkpfUkFOS19JRF9KU1FSX01BU0spKSB8CkBAIC02OTQ0LDcgKzY5ODIsNyBAQAogfQogCiAvKioKLSAgKiBAYnJpZWYgIEdldCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIGRhdGEsIHJhbmdlIGZpdCBmb3IKKyAgKiBAYnJpZWYgIEdldCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiBkYXRhLCByYW5nZSBmaXQgZm9yCiAgICogICAgICAgICBhbGwgQURDIGNvbmZpZ3VyYXRpb25zOiBhbGwgQURDIHJlc29sdXRpb25zIGFuZAogICAqICAgICAgICAgYWxsIG92ZXJzYW1wbGluZyBpbmNyZWFzZWQgZGF0YSB3aWR0aCAoZm9yIGRldmljZXMKICAgKiAgICAgICAgIHdpdGggZmVhdHVyZSBvdmVyc2FtcGxpbmcpLgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9idXMuaCBiL0luYy9zdG0zMmc0eHhfbGxfYnVzLmgKaW5kZXggM2UwMjUxOS4uNzRjOTI4ZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9idXMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2J1cy5oCkBAIC0yMyw3ICsyMyw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9jb21wLmggYi9JbmMvc3RtMzJnNHh4X2xsX2NvbXAuaAppbmRleCBhMzJkNThkLi4yYTA3OGE4IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2xsX2NvbXAuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2NvbXAuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC03OSwxMSArNzksNiBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0NPTVBfU2V0T3V0cHV0QmxhbmtpbmdTb3VyY2UoKS4gKi8KIAotICB1aW50MzJfdCBEZWdsaXRjaGVyTW9kZTsgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlIHRoZSBjb21wYXJhdG9yIGRlZ2xpdGNoZXIgbW9kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQ09NUF9MTF9FQ19ERUdMSVRDSEVSX01PREUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9DT01QX1NldERlZ2xpdGNoZXJNb2RlKCkuICovCi0KIH0gTExfQ09NUF9Jbml0VHlwZURlZjsKIAogLyoqCkBAIC0yMDIsMTUgKzE5Nyw2IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBDT01QX0xMX0VDX0RFR0xJVENIRVJfTU9ERSBDb21wYXJhdG9yIERlZ2xpdGNoZXIgTW9kZQotICAqIEB7Ci0gICovCi0jZGVmaW5lIExMX0NPTVBfREVHTElUQ0hFUl9ESVNBQkxFRCAgICAgICgweDAwMDAwMDAwVUwpICAgICAgICAgLyohPCBDb21wYXJhdG9yIGRlZ2xpdGNoZXIgZGlzYWJsZWQgKi8KLSNkZWZpbmUgTExfQ09NUF9ERUdMSVRDSEVSX0VOQUJMRUQgICAgICAgKENPTVBfQ1NSX0RFR0xJVENIRU4pICAvKiE8IENvbXBhcmF0b3IgZGVnbGl0Y2hlciBlbmFibGVkICovCi0vKioKLSAgKiBAfQotICAqLwotCiAvKiogQGRlZmdyb3VwIENPTVBfTExfRUNfSFdfREVMQVlTICBEZWZpbml0aW9ucyBvZiBDT01QIGhhcmR3YXJlIGNvbnN0cmFpbnRzIGRlbGF5cwogICAqIEBub3RlICAgT25seSBDT01QIHBlcmlwaGVyYWwgSFcgZGVsYXlzIGFyZSBkZWZpbmVkIGluIENPTVAgTEwgZHJpdmVyIGRyaXZlciwKICAgKiAgICAgICAgIG5vdCB0aW1lb3V0IHZhbHVlcy4KQEAgLTYzMCwzMiArNjE2LDYgQEAKIH0KIAogLyoqCi0gICogQGJyaWVmICBDb25maWd1cmUgY29tcGFyYXRvciBpbnN0YW5jZSBkZWdsaXRjaGVyIG1vZGUuCi0gICogQHJtdG9sbCBDU1IgICAgICBERUdMSVRDSEVOICAgICAgTExfQ09NUF9TZXREZWdsaXRjaGVyTW9kZQotICAqIEBwYXJhbSAgQ09NUHggQ29tcGFyYXRvciBpbnN0YW5jZQotICAqIEBwYXJhbSAgRGVnbGl0Y2hlck1vZGUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0RFR0xJVENIRVJfRElTQUJMRUQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0RFR0xJVENIRVJfRU5BQkxFRAotICAqIEByZXR2YWwgTm9uZQotICAqLwotX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQ09NUF9TZXREZWdsaXRjaGVyTW9kZShDT01QX1R5cGVEZWYgKkNPTVB4LCB1aW50MzJfdCBEZWdsaXRjaGVyTW9kZSkKLXsKLSAgTU9ESUZZX1JFRyhDT01QeC0+Q1NSLCBDT01QX0NTUl9ERUdMSVRDSEVOLCBEZWdsaXRjaGVyTW9kZSk7Ci19Ci0KLS8qKgotICAqIEBicmllZiAgR2V0IGNvbXBhcmF0b3IgaW5zdGFuY2UgZGVnbGl0Y2hlciBtb2RlLgotICAqIEBybXRvbGwgQ1NSICAgICAgREVHTElUQ0hFTiAgICAgIExMX0NPTVBfR2V0RGVnbGl0Y2hlck1vZGUKLSAgKiBAcGFyYW0gIENPTVB4IENvbXBhcmF0b3IgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQ09NUF9ERUdMSVRDSEVSX0RJU0FCTEVECi0gICogICAgICAgICBAYXJnIEByZWYgTExfQ09NUF9ERUdMSVRDSEVSX0VOQUJMRUQKLSAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9DT01QX0dldERlZ2xpdGNoZXJNb2RlKENPTVBfVHlwZURlZiAqQ09NUHgpCi17Ci0gIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKENPTVB4LT5DU1IsIENPTVBfQ1NSX0RFR0xJVENIRU4pKTsKLX0KLS8qKgogICAqIEB9CiAgICovCiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfY29ydGV4LmggYi9JbmMvc3RtMzJnNHh4X2xsX2NvcnRleC5oCmluZGV4IGQ3YTQ5OTcuLjQyODJmYWUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfY29ydGV4LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9jb3J0ZXguaApAQCAtMjEsNyArMjEsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfY3JjLmggYi9JbmMvc3RtMzJnNHh4X2xsX2NyYy5oCmluZGV4IDdkMmJkNjAuLmU2ZmEwZTggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfY3JjLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9jcmMuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX2RhYy5oIGIvSW5jL3N0bTMyZzR4eF9sbF9kYWMuaAppbmRleCA0ZDhmNTQ0Li5jZmE4MDU1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2xsX2RhYy5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfZGFjLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNTUsNyArNTUsNiBAQAogLyogLSBjaGFubmVsIHJlZ2lzdGVyIG9mZnNldCBvZiBkYXRhIG91dHB1dCByZWdpc3RlciBET1J4ICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0gY2hhbm5lbCByZWdpc3RlciBvZmZzZXQgb2Ygc2FtcGxlLWFuZC1ob2xkIHNhbXBsZSB0aW1lIHJlZ2lzdGVyIFNIU1J4ICAgICovCiAvKiAtIGNoYW5uZWwgcmVnaXN0ZXIgb2Zmc2V0IG9mIHNhd3Rvb3RoIHJlZ2lzdGVyIFNUUnggICAgICAgICAgICAgICAgICAgICAgICAqLwotCiAjZGVmaW5lIERBQ19DUl9DSDFfQklUT0ZGU0VUICAgICAgICAgICAwVSAgICAvKiBQb3NpdGlvbiBvZiBjaGFubmVsIGJpdHMgaW50byByZWdpc3RlcnMgQ1IsIE1DUiwgQ0NSLCBTSEhSLCBTSFJSLCBTVE1PRFIgb2YgY2hhbm5lbCAxICovCiAjZGVmaW5lIERBQ19DUl9DSDJfQklUT0ZGU0VUICAgICAgICAgICAxNlUgICAvKiBQb3NpdGlvbiBvZiBjaGFubmVsIGJpdHMgaW50byByZWdpc3RlcnMgQ1IsIE1DUiwgQ0NSLCBTSEhSLCBTSFJSLCBTVE1PRFIgb2YgY2hhbm5lbCAyICovCiAjZGVmaW5lIERBQ19DUl9DSFhfQklUT0ZGU0VUX01BU0sgICAgICAoREFDX0NSX0NIMV9CSVRPRkZTRVQgfCBEQUNfQ1JfQ0gyX0JJVE9GRlNFVCkKQEAgLTgyLDcgKzgxLDYgQEAKICNkZWZpbmUgREFDX1JFR19ET1IxX1JFR09GRlNFVCAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgIC8qIFJlZ2lzdGVyIERPUnggY2hhbm5lbCAxIHRha2VuIGFzIHJlZmVyZW5jZSAqLwogI2RlZmluZSBEQUNfUkVHX0RPUjJfUkVHT0ZGU0VUICAgICAgICAgMHgwMDAwMDAyMFUgICAgICAgICAgICAgLyogUmVnaXN0ZXIgb2Zmc2V0IG9mIERPUnggY2hhbm5lbCAxIHZlcnN1cyBET1J4IGNoYW5uZWwgMiAoc2hpZnRlZCBsZWZ0IG9mIDUgYml0cykgKi8KICNkZWZpbmUgREFDX1JFR19ET1JYX1JFR09GRlNFVF9NQVNLICAgIChEQUNfUkVHX0RPUjFfUkVHT0ZGU0VUIHwgREFDX1JFR19ET1IyX1JFR09GRlNFVCkKLQogI2RlZmluZSBEQUNfUkVHX1NIU1IxX1JFR09GRlNFVCAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgLyogUmVnaXN0ZXIgU0hTUnggY2hhbm5lbCAxIHRha2VuIGFzIHJlZmVyZW5jZSAqLwogI2RlZmluZSBEQUNfUkVHX1NIU1IyX1JFR09GRlNFVCAgICAgICAgMHgwMDAwMDA0MFUgICAgICAgICAgICAgLyogUmVnaXN0ZXIgb2Zmc2V0IG9mIFNIU1J4IGNoYW5uZWwgMSB2ZXJzdXMgU0hTUnggY2hhbm5lbCAyIChzaGlmdGVkIGxlZnQgb2YgNiBiaXRzKSAqLwogI2RlZmluZSBEQUNfUkVHX1NIU1JYX1JFR09GRlNFVF9NQVNLICAgKERBQ19SRUdfU0hTUjFfUkVHT0ZGU0VUIHwgREFDX1JFR19TSFNSMl9SRUdPRkZTRVQpCkBAIC0xNDgsMTMgKzE0NiwxMyBAQAogICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLSAgdWludDMyX3QgVHJpZ2dlclNvdXJjZTsgICAgICAgICAgICAgICAvKiE8IFNldCB0aGUgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZSBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsOiBpbnRlcm5hbCAoU1cgc3RhcnQpIG9yIGZyb20gZXh0ZXJuYWwgSVAgKHRpbWVyIGV2ZW50LCBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZSkuCisgIHVpbnQzMl90IFRyaWdnZXJTb3VyY2U7ICAgICAgICAgICAgICAgLyohPCBTZXQgdGhlIGNvbnZlcnNpb24gdHJpZ2dlciBzb3VyY2UgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDogaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWwgKHRpbWVyIGV2ZW50LCBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERBQ19MTF9FQ19UUklHR0VSX1NPVVJDRQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RBQ19TZXRUcmlnZ2VyU291cmNlKCkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBJZiB3YXZlZm9ybSBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBtb2RlIGlzIHNldCB0byBzYXd0b290aCwgdGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCBhcyBzYXd0b290aCBSRVNFVCB0cmlnZ2VyICovCiAKLSAgdWludDMyX3QgVHJpZ2dlclNvdXJjZTI7ICAgICAgICAgICAgICAvKiE8IFNldCB0aGUgY29udmVyc2lvbiBzZWNvbmRhcnkgdHJpZ2dlciBzb3VyY2UgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbDogaW50ZXJuYWwgKFNXIHN0YXJ0KSBvciBmcm9tIGV4dGVybmFsIElQICh0aW1lciBldmVudCwgZXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUpLgorICB1aW50MzJfdCBUcmlnZ2VyU291cmNlMjsgICAgICAgICAgICAgIC8qITwgU2V0IHRoZSBjb252ZXJzaW9uIHNlY29uZGFyeSB0cmlnZ2VyIHNvdXJjZSBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsOiBpbnRlcm5hbCAoU1cgc3RhcnQpIG9yIGZyb20gZXh0ZXJuYWwgcGVyaXBoZXJhbCAodGltZXIgZXZlbnQsIGV4dGVybmFsIGludGVycnVwdCBsaW5lKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgREFDX0xMX0VDX1RSSUdHRVJfU09VUkNFCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfREFDX1NldFRyaWdnZXJTb3VyY2UyKCkuCkBAIC0xODAsNiArMTc4LDcgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9EQUNfU2V0T3V0cHV0QnVmZmVyKCkuICovCiAKKwogICB1aW50MzJfdCBPdXRwdXRDb25uZWN0aW9uOyAgICAgICAgICAgIC8qITwgU2V0IHRoZSBvdXRwdXQgY29ubmVjdGlvbiBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBEQUNfTExfRUNfT1VUUFVUX0NPTk5FQ1RJT04KIApAQCAtMTg5LDcgKzE4OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERBQ19MTF9FQ19PVVRQVVRfTU9ERQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0RBQ19TZXRPdXRwdXRNb2RlKCkuICovCi0KIH0gTExfREFDX0luaXRUeXBlRGVmOwogCiAvKioKQEAgLTI2NiwzMSArMjY0LDMxIEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgTExfREFDX1RSSUdfU09GVFdBUkUgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgREFDIChhbGwpIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGludGVybmFsIChTVyBzdGFydCkgKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX1RJTTFfVFJHTyAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzApIC8qITwgREFDMyBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBUSU0xIFRSR08uICovCi0jZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU04X1RSR08gICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBQ19DUl9UU0VMMV8wKSAvKiE8IERBQzEvMi80IGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IFRJTTggVFJHTy4gUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgREFDeCBpbnN0YW5jZSBhdmFpbGFiaWxpdHkuICovCi0jZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU03X1RSR08gICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfVFNFTDFfMSAgICAgICAgICAgICAgICAgKSAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBUSU03IFRSR08uICovCi0jZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU0xNV9UUkdPICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfVFNFTDFfMSB8IERBQ19DUl9UU0VMMV8wKSAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBUSU0xNSBUUkdPLiAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfVElNMl9UUkdPICAgICAgICAgICAgICggICAgICAgICAgICAgICAgIERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogVElNMiBUUkdPLiAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfVElNNF9UUkdPICAgICAgICAgICAgICggICAgICAgICAgICAgICAgIERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogVElNNCBUUkdPLiAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfRVhUSV9MSU5FOSAgICAgICAgICAgICggICAgICAgICAgICAgICAgIERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogZXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgOS4gTm90ZTogb25seSB0byBiZSB1c2VkIGFzIHVwZGF0ZSBvciByZXNldCAoc2F3dG9vdGggZ2VuZXJhdGlvbikgdHJpZ2dlciAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfRVhUSV9MSU5FMTAgICAgICAgICAgICggICAgICAgICAgICAgICAgIERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogZXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTAuIE5vdGU6IG9ubHkgdG8gYmUgdXNlZCBhcyBpbmNyZW1lbnQgKHNhd3Rvb3RoIGdlbmVyYXRpb24pIHRyaWdnZXIgKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX1RJTTZfVFJHTyAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICBEQUNfQ1JfVFNFTDFfMiB8IERBQ19DUl9UU0VMMV8xIHwgREFDX0NSX1RTRUwxXzApIC8qITwgREFDIChhbGwpIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IFRJTTYgVFJHTy4gKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX1RJTTNfVFJHTyAgICAgICAgICAgICAoREFDX0NSX1RTRUwxXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC8qITwgREFDIChhbGwpIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IFRJTTMgVFJHTy4gKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX0hSVElNX1NURVBfVFJHMSAgICAgICAoREFDX0NSX1RTRUwxXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREFDX0NSX1RTRUwxXzApICAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBIUlRJTSBEQUMgU1RFUCBUUklHMSAgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fUlNUX1RSRzEgICAgICAgIChEQUNfQ1JfVFNFTDFfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMCkgIC8qITwgREFDIChhbGwpIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IEhSVElNIERBQyBSRVNFVCBUUklHMSAob25seSBhdmFpbGFibGUgZm9yIHNhd3Rvb3RoIHdhdmUgZ2VuZXJhdGlvbikuIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBvbmx5IGF2YWlsYWJsZSBpZiBIUlRJTSBmZWF0dXJlIGlzIHN1cHBvcnRlZCAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3Igc3VwcG9ydGVkIGZlYXR1cmVzIGxpc3QpICovCi0jZGVmaW5lIExMX0RBQ19UUklHX0VYVF9IUlRJTV9TVEVQX1RSRzIgICAgICAgKERBQ19DUl9UU0VMMV8zICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMSAgICAgICAgICAgICAgICAgKSAgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogSFJUSU0gREFDIFNURVAgVFJJRzIgIChvbmx5IGF2YWlsYWJsZSBmb3Igc2F3dG9vdGggd2F2ZSBnZW5lcmF0aW9uKS4gT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG9ubHkgYXZhaWxhYmxlIGlmIEhSVElNIGZlYXR1cmUgaXMgc3VwcG9ydGVkIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBzdXBwb3J0ZWQgZmVhdHVyZXMgbGlzdCkgKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX0hSVElNX1JTVF9UUkcyICAgICAgICAoREFDX0NSX1RTRUwxXzMgICAgICAgICAgICAgICAgICB8IERBQ19DUl9UU0VMMV8xICAgICAgICAgICAgICAgICApICAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBIUlRJTSBEQUMgUkVTRVQgVFJJRzIgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fU1RFUF9UUkczICAgICAgIChEQUNfQ1JfVFNFTDFfMyAgICAgICAgICAgICAgICAgIHwgREFDX0NSX1RTRUwxXzEgfCBEQUNfQ1JfVFNFTDFfMCkgIC8qITwgREFDIChhbGwpIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IEhSVElNIERBQyBTVEVQIFRSSUczICAob25seSBhdmFpbGFibGUgZm9yIHNhd3Rvb3RoIHdhdmUgZ2VuZXJhdGlvbikuIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBvbmx5IGF2YWlsYWJsZSBpZiBIUlRJTSBmZWF0dXJlIGlzIHN1cHBvcnRlZCAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3Igc3VwcG9ydGVkIGZlYXR1cmVzIGxpc3QpICovCi0jZGVmaW5lIExMX0RBQ19UUklHX0VYVF9IUlRJTV9SU1RfVFJHMyAgICAgICAgKERBQ19DUl9UU0VMMV8zICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMSB8IERBQ19DUl9UU0VMMV8wKSAgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogSFJUSU0gREFDIFJFU0VUIFRSSUczIChvbmx5IGF2YWlsYWJsZSBmb3Igc2F3dG9vdGggd2F2ZSBnZW5lcmF0aW9uKS4gT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG9ubHkgYXZhaWxhYmxlIGlmIEhSVElNIGZlYXR1cmUgaXMgc3VwcG9ydGVkIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBzdXBwb3J0ZWQgZmVhdHVyZXMgbGlzdCkgKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX0hSVElNX1NURVBfVFJHNCAgICAgICAoREFDX0NSX1RTRUwxXzMgfCBEQUNfQ1JfVFNFTDFfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBIUlRJTSBEQUMgU1RFUCBUUklHNCAgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fUlNUX1RSRzQgICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgIC8qITwgREFDIChhbGwpIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IEhSVElNIERBQyBSRVNFVCBUUklHNCAob25seSBhdmFpbGFibGUgZm9yIHNhd3Rvb3RoIHdhdmUgZ2VuZXJhdGlvbikuIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBvbmx5IGF2YWlsYWJsZSBpZiBIUlRJTSBmZWF0dXJlIGlzIHN1cHBvcnRlZCAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3Igc3VwcG9ydGVkIGZlYXR1cmVzIGxpc3QpICovCi0jZGVmaW5lIExMX0RBQ19UUklHX0VYVF9IUlRJTV9TVEVQX1RSRzUgICAgICAgKERBQ19DUl9UU0VMMV8zIHwgREFDX0NSX1RTRUwxXzIgICAgICAgICAgICAgICAgICB8IERBQ19DUl9UU0VMMV8wKSAgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogSFJUSU0gREFDIFNURVAgVFJJRzUgIChvbmx5IGF2YWlsYWJsZSBmb3Igc2F3dG9vdGggd2F2ZSBnZW5lcmF0aW9uKS4gT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG9ubHkgYXZhaWxhYmxlIGlmIEhSVElNIGZlYXR1cmUgaXMgc3VwcG9ydGVkIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBzdXBwb3J0ZWQgZmVhdHVyZXMgbGlzdCkgKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX0hSVElNX1JTVF9UUkc1ICAgICAgICAoREFDX0NSX1RTRUwxXzMgfCBEQUNfQ1JfVFNFTDFfMiAgICAgICAgICAgICAgICAgIHwgREFDX0NSX1RTRUwxXzApICAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBIUlRJTSBEQUMgUkVTRVQgVFJJRzUgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLwotI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fU1RFUF9UUkc2ICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgIC8qITwgREFDIChhbGwpIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IEhSVElNIERBQyBTVEVQIFRSSUc2ICAob25seSBhdmFpbGFibGUgZm9yIHNhd3Rvb3RoIHdhdmUgZ2VuZXJhdGlvbikuIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBvbmx5IGF2YWlsYWJsZSBpZiBIUlRJTSBmZWF0dXJlIGlzIHN1cHBvcnRlZCAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3Igc3VwcG9ydGVkIGZlYXR1cmVzIGxpc3QpICovCi0jZGVmaW5lIExMX0RBQ19UUklHX0VYVF9IUlRJTV9SU1RfVFJHNiAgICAgICAgKERBQ19DUl9UU0VMMV8zIHwgREFDX0NSX1RTRUwxXzIgfCBEQUNfQ1JfVFNFTDFfMSAgICAgICAgICAgICAgICAgKSAgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBJUDogSFJUSU0gREFDIFJFU0VUIFRSSUc2IChvbmx5IGF2YWlsYWJsZSBmb3Igc2F3dG9vdGggd2F2ZSBnZW5lcmF0aW9uKS4gT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG9ubHkgYXZhaWxhYmxlIGlmIEhSVElNIGZlYXR1cmUgaXMgc3VwcG9ydGVkIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBzdXBwb3J0ZWQgZmVhdHVyZXMgbGlzdCkgKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX0hSVElNX1RSR08xICAgICAgICAgICAoREFDX0NSX1RTRUwxXzMgfCBEQUNfQ1JfVFNFTDFfMiB8IERBQ19DUl9UU0VMMV8xIHwgREFDX0NSX1RTRUwxXzApIC8qITwgREFDMSY0IGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgSVA6IEhSVElNMSBEQUNUUkcxLiBOb3RlOiBvbmx5IHRvIGJlIHVzZWQgYXMgdXBkYXRlIG9yIHJlc2V0IChzYXd0b290aCBnZW5lcmF0aW9uKSB0cmlnZ2VyLiBSZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBEQUN4IGluc3RhbmNlIGF2YWlsYWJpbGl0eS4gT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG9ubHkgYXZhaWxhYmxlIGlmIEhSVElNIGZlYXR1cmUgaXMgc3VwcG9ydGVkIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBzdXBwb3J0ZWQgZmVhdHVyZXMgbGlzdCkgKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX0hSVElNX1RSR08yICAgICAgICAgICAoREFDX0NSX1RTRUwxXzMgfCBEQUNfQ1JfVFNFTDFfMiB8IERBQ19DUl9UU0VMMV8xIHwgREFDX0NSX1RTRUwxXzApIC8qITwgREFDMiBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBIUlRJTTEgREFDVFJHMi4gTm90ZTogb25seSB0byBiZSB1c2VkIGFzIHVwZGF0ZSBvciByZXNldCAoc2F3dG9vdGggZ2VuZXJhdGlvbikgdHJpZ2dlci4gT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG9ubHkgYXZhaWxhYmxlIGlmIEhSVElNIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGFuZCBEQUMyIGluc3RhbmNlIHByZXNlbnQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0IGFuZCBEQUMyIGluc3RhbmNlIGF2YWlsYWJpbGl0eSkgKi8KLSNkZWZpbmUgTExfREFDX1RSSUdfRVhUX0hSVElNX1RSR08zICAgICAgICAgICAoREFDX0NSX1RTRUwxXzMgfCBEQUNfQ1JfVFNFTDFfMiB8IERBQ19DUl9UU0VMMV8xIHwgREFDX0NSX1RTRUwxXzApIC8qITwgREFDMyBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIElQOiBIUlRJTTEgREFDVFJHMy4gTm90ZTogb25seSB0byBiZSB1c2VkIGFzIHVwZGF0ZSBvciByZXNldCAoc2F3dG9vdGggZ2VuZXJhdGlvbikgdHJpZ2dlci4gT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG9ubHkgYXZhaWxhYmxlIGlmIEhSVElNIGZlYXR1cmUgaXMgc3VwcG9ydGVkIChyZWZlciB0byBkZXZpY2UgZGF0YXNoZWV0IGZvciBzdXBwb3J0ZWQgZmVhdHVyZXMgbGlzdCkgKi8KKyNkZWZpbmUgTExfREFDX1RSSUdfRVhUX1RJTTFfVFJHTyAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzApIC8qITwgREFDMyBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IFRJTTEgVFJHTy4gKi8KKyNkZWZpbmUgTExfREFDX1RSSUdfRVhUX1RJTThfVFJHTyAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzApIC8qITwgREFDMS8yLzQgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU04IFRSR08uIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIERBQ3ggaW5zdGFuY2UgYXZhaWxhYmlsaXR5LiAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfVElNN19UUkdPICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU03IFRSR08uICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU0xNV9UUkdPICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfQ1JfVFNFTDFfMSB8IERBQ19DUl9UU0VMMV8wKSAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IFRJTTE1IFRSR08uICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU0yX1RSR08gICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IFRJTTIgVFJHTy4gKi8KKyNkZWZpbmUgTExfREFDX1RSSUdfRVhUX1RJTTRfVFJHTyAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICBEQUNfQ1JfVFNFTDFfMiAgICAgICAgICAgICAgICAgIHwgREFDX0NSX1RTRUwxXzApIC8qITwgREFDIChhbGwpIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgcGVyaXBoZXJhbDogVElNNCBUUkdPLiAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfRVhUSV9MSU5FOSAgICAgICAgICAgICggICAgICAgICAgICAgICAgIERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBleHRlcm5hbCBpbnRlcnJ1cHQgbGluZSA5LiBOb3RlOiBvbmx5IHRvIGJlIHVzZWQgYXMgdXBkYXRlIG9yIHJlc2V0IChzYXd0b290aCBnZW5lcmF0aW9uKSB0cmlnZ2VyICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9FWFRJX0xJTkUxMCAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzIgfCBEQUNfQ1JfVFNFTDFfMSAgICAgICAgICAgICAgICAgKSAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IGV4dGVybmFsIGludGVycnVwdCBsaW5lIDEwLiBOb3RlOiBvbmx5IHRvIGJlIHVzZWQgYXMgaW5jcmVtZW50IChzYXd0b290aCBnZW5lcmF0aW9uKSB0cmlnZ2VyICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9USU02X1RSR08gICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgREFDX0NSX1RTRUwxXzIgfCBEQUNfQ1JfVFNFTDFfMSB8IERBQ19DUl9UU0VMMV8wKSAvKiE8IERBQyAoYWxsKSBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IFRJTTYgVFJHTy4gKi8KKyNkZWZpbmUgTExfREFDX1RSSUdfRVhUX1RJTTNfVFJHTyAgICAgICAgICAgICAoREFDX0NSX1RTRUwxXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC8qITwgREFDIChhbGwpIGNoYW5uZWwgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgcGVyaXBoZXJhbDogVElNMyBUUkdPLiAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fU1RFUF9UUkcxICAgICAgIChEQUNfQ1JfVFNFTDFfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgU1RFUCBUUklHMSAgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fUlNUX1RSRzEgICAgICAgIChEQUNfQ1JfVFNFTDFfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgUkVTRVQgVFJJRzEgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fU1RFUF9UUkcyICAgICAgIChEQUNfQ1JfVFNFTDFfMyAgICAgICAgICAgICAgICAgIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgU1RFUCBUUklHMiAgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fUlNUX1RSRzIgICAgICAgIChEQUNfQ1JfVFNFTDFfMyAgICAgICAgICAgICAgICAgIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgUkVTRVQgVFJJRzIgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fU1RFUF9UUkczICAgICAgIChEQUNfQ1JfVFNFTDFfMyAgICAgICAgICAgICAgICAgIHwgREFDX0NSX1RTRUwxXzEgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgU1RFUCBUUklHMyAgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fUlNUX1RSRzMgICAgICAgIChEQUNfQ1JfVFNFTDFfMyAgICAgICAgICAgICAgICAgIHwgREFDX0NSX1RTRUwxXzEgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgUkVTRVQgVFJJRzMgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fU1RFUF9UUkc0ICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgU1RFUCBUUklHNCAgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fUlNUX1RSRzQgICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgUkVTRVQgVFJJRzQgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fU1RFUF9UUkc1ICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgU1RFUCBUUklHNSAgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fUlNUX1RSRzUgICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgUkVTRVQgVFJJRzUgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fU1RFUF9UUkc2ICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgU1RFUCBUUklHNiAgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fUlNUX1RSRzYgICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgICAgICAgICAgICAgICAgICkgLyohPCBEQUMgKGFsbCkgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTSBEQUMgUkVTRVQgVFJJRzYgKG9ubHkgYXZhaWxhYmxlIGZvciBzYXd0b290aCB3YXZlIGdlbmVyYXRpb24pLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLworI2RlZmluZSBMTF9EQUNfVFJJR19FWFRfSFJUSU1fVFJHTzEgICAgICAgICAgIChEQUNfQ1JfVFNFTDFfMyB8IERBQ19DUl9UU0VMMV8yIHwgREFDX0NSX1RTRUwxXzEgfCBEQUNfQ1JfVFNFTDFfMCkgLyohPCBEQUMxJjQgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTTEgREFDVFJHMS4gTm90ZTogb25seSB0byBiZSB1c2VkIGFzIHVwZGF0ZSBvciByZXNldCAoc2F3dG9vdGggZ2VuZXJhdGlvbikgdHJpZ2dlci4gUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3IgREFDeCBpbnN0YW5jZSBhdmFpbGFiaWxpdHkuIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHBhcmFtZXRlciBvbmx5IGF2YWlsYWJsZSBpZiBIUlRJTSBmZWF0dXJlIGlzIHN1cHBvcnRlZCAocmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldCBmb3Igc3VwcG9ydGVkIGZlYXR1cmVzIGxpc3QpICovCisjZGVmaW5lIExMX0RBQ19UUklHX0VYVF9IUlRJTV9UUkdPMiAgICAgICAgICAgKERBQ19DUl9UU0VMMV8zIHwgREFDX0NSX1RTRUwxXzIgfCBEQUNfQ1JfVFNFTDFfMSB8IERBQ19DUl9UU0VMMV8wKSAvKiE8IERBQzIgY2hhbm5lbCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBIUlRJTTEgREFDVFJHMi4gTm90ZTogb25seSB0byBiZSB1c2VkIGFzIHVwZGF0ZSBvciByZXNldCAoc2F3dG9vdGggZ2VuZXJhdGlvbikgdHJpZ2dlci4gT24gdGhpcyBTVE0zMiBzZXJpZSwgcGFyYW1ldGVyIG9ubHkgYXZhaWxhYmxlIGlmIEhSVElNIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGFuZCBEQUMyIGluc3RhbmNlIHByZXNlbnQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0IGFuZCBEQUMyIGluc3RhbmNlIGF2YWlsYWJpbGl0eSkgKi8KKyNkZWZpbmUgTExfREFDX1RSSUdfRVhUX0hSVElNX1RSR08zICAgICAgICAgICAoREFDX0NSX1RTRUwxXzMgfCBEQUNfQ1JfVFNFTDFfMiB8IERBQ19DUl9UU0VMMV8xIHwgREFDX0NSX1RTRUwxXzApIC8qITwgREFDMyBjaGFubmVsIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IEhSVElNMSBEQUNUUkczLiBOb3RlOiBvbmx5IHRvIGJlIHVzZWQgYXMgdXBkYXRlIG9yIHJlc2V0IChzYXd0b290aCBnZW5lcmF0aW9uKSB0cmlnZ2VyLiBPbiB0aGlzIFNUTTMyIHNlcmllLCBwYXJhbWV0ZXIgb25seSBhdmFpbGFibGUgaWYgSFJUSU0gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKHJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQgZm9yIHN1cHBvcnRlZCBmZWF0dXJlcyBsaXN0KSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTQxMiw3ICs0MTAsNyBAQAogICAqLwogCiAvKiogQGRlZmdyb3VwIERBQ19MTF9FQ19IV19ERUxBWVMgIERlZmluaXRpb25zIG9mIERBQyBoYXJkd2FyZSBjb25zdHJhaW50cyBkZWxheXMKLSAgKiBAbm90ZSAgIE9ubHkgREFDIElQIEhXIGRlbGF5cyBhcmUgZGVmaW5lZCBpbiBEQUMgTEwgZHJpdmVyIGRyaXZlciwKKyAgKiBAbm90ZSAgIE9ubHkgREFDIHBlcmlwaGVyYWwgSFcgZGVsYXlzIGFyZSBkZWZpbmVkIGluIERBQyBMTCBkcml2ZXIgZHJpdmVyLAogICAqICAgICAgICAgbm90IHRpbWVvdXQgdmFsdWVzLgogICAqICAgICAgICAgRm9yIGRldGFpbHMgb24gZGVsYXlzIHZhbHVlcywgcmVmZXIgdG8gZGVzY3JpcHRpb25zIGluIHNvdXJjZSBjb2RlCiAgICogICAgICAgICBhYm92ZSBlYWNoIGxpdGVyYWwgZGVmaW5pdGlvbi4KQEAgLTQzMyw3ICs0MzEsNiBAQAogLyogVW5pdDogdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTExfREFDX0RFTEFZX1NUQVJUVVBfVk9MVEFHRV9TRVRUTElOR19VUyAgICAgICAgICAgICA4VSAgLyohPCBEZWxheSBmb3IgREFDIGNoYW5uZWwgdm9sdGFnZSBzZXR0bGluZyB0aW1lIGZyb20gREFDIGNoYW5uZWwgc3RhcnR1cCAodHJhbnNpdGlvbiBmcm9tIGRpc2FibGUgdG8gZW5hYmxlKSAqLwogCi0KIC8qIERlbGF5IGZvciBEQUMgY2hhbm5lbCB2b2x0YWdlIHNldHRsaW5nIHRpbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBOb3RlOiBEQUMgY2hhbm5lbCBzdGFydHVwIHRpbWUgZGVwZW5kcyBvbiBib2FyZCBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudDogICAqLwogLyogICAgICAgaW1wZWRhbmNlIGNvbm5lY3RlZCB0byBEQUMgY2hhbm5lbCBvdXRwdXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTUzNiw3ICs1MzMsNyBAQAogICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKQpAQCAtMTA2NSw3ICsxMDYyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RBQ19TZXRXYXZlU2F3dG9vdGhQb2xhcml0eShEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IFBvbGFyaXR5KQogewotICByZWdpc3RlciB1aW50MzJfdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPlNUUjEsIChEQUNfQ2hhbm5lbCA+PiBEQUNfUkVHX1NUUlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpICYgREFDX1JFR19TVFJYX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+U1RSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfU1RSWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUykgJiBEQUNfUkVHX1NUUlhfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCk7CiAKICAgTU9ESUZZX1JFRygqcHJlZywKICAgICAgICAgICAgICBEQUNfU1RSMV9TVERJUjEsCkBAIC0xMDg5LDcgKzEwODYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19HZXRXYXZlU2F3dG9vdGhQb2xhcml0eShEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvbnN0ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+U1RSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfU1RSWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUykgJiBEQUNfUkVHX1NUUlhfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCk7CisgIF9fSU8gdWludDMyX3QgY29uc3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5TVFIxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19TVFJYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfU1RSWF9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKIAogICByZXR1cm4gKHVpbnQzMl90KSBSRUFEX0JJVCgqcHJlZywgREFDX1NUUjFfU1RESVIxKTsKIH0KQEAgLTExMTYsNyArMTExMyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQUNfU2V0V2F2ZVNhd3Rvb3RoUmVzZXREYXRhKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgdWludDMyX3QgUmVzZXREYXRhKQogewotICByZWdpc3RlciB1aW50MzJfdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPlNUUjEsIChEQUNfQ2hhbm5lbCA+PiBEQUNfUkVHX1NUUlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpICYgREFDX1JFR19TVFJYX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+U1RSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfU1RSWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUykgJiBEQUNfUkVHX1NUUlhfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCk7CiAKICAgTU9ESUZZX1JFRygqcHJlZywKICAgICAgICAgICAgICBEQUNfU1RSMV9TVFJTVERBVEExLApAQCAtMTEzOSw3ICsxMTM2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EQUNfR2V0V2F2ZVNhd3Rvb3RoUmVzZXREYXRhKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgY29uc3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5TVFIxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19TVFJYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfU1RSWF9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKKyAgX19JTyB1aW50MzJfdCBjb25zdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPlNUUjEsIChEQUNfQ2hhbm5lbCA+PiBEQUNfUkVHX1NUUlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpICYgREFDX1JFR19TVFJYX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOwogCiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKCpwcmVnLCBEQUNfU1RSMV9TVFJTVERBVEExKSA+PiBEQUNfU1RSMV9TVFJTVERBVEExX1Bvcyk7CiB9CkBAIC0xMTY4LDcgKzExNjUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfREFDX1NldFdhdmVTYXd0b290aFN0ZXBEYXRhKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgdWludDMyX3QgU3RlcERhdGEpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+U1RSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfU1RSWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUykgJiBEQUNfUkVHX1NUUlhfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5TVFIxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19TVFJYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfU1RSWF9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKIAogICBNT0RJRllfUkVHKCpwcmVnLAogICAgICAgICAgICAgIERBQ19TVFIxX1NUSU5DREFUQTEsCkBAIC0xMTkzLDcgKzExOTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RBQ19HZXRXYXZlU2F3dG9vdGhTdGVwRGF0YShEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvbnN0ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+U1RSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfU1RSWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUykgJiBEQUNfUkVHX1NUUlhfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCk7CisgIF9fSU8gdWludDMyX3QgY29uc3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5TVFIxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19TVFJYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfU1RSWF9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKIAogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVCgqcHJlZywgREFDX1NUUjFfU1RJTkNEQVRBMSkgPj4gREFDX1NUUjFfU1RJTkNEQVRBMV9Qb3MpOwogfQpAQCAtMTYzNiw3ICsxNjMzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RBQ19TZXRTYW1wbGVBbmRIb2xkU2FtcGxlVGltZShEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IFNhbXBsZVRpbWUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+U0hTUjEsIChEQUNfQ2hhbm5lbCA+PiBEQUNfUkVHX1NIU1JYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfU0hTUlhfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5TSFNSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfU0hTUlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpICYgREFDX1JFR19TSFNSWF9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKIAogICBNT0RJRllfUkVHKCpwcmVnLAogICAgICAgICAgICAgIERBQ19TSFNSMV9UU0FNUExFMSwKQEAgLTE2NTksNyArMTY1Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX0dldFNhbXBsZUFuZEhvbGRTYW1wbGVUaW1lKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgY29uc3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5TSFNSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfU0hTUlhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpICYgREFDX1JFR19TSFNSWF9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKKyAgX19JTyB1aW50MzJfdCBjb25zdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPlNIU1IxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19TSFNSWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUykgJiBEQUNfUkVHX1NIU1JYX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOwogCiAgIHJldHVybiAodWludDMyX3QpIFJFQURfQklUKCpwcmVnLCBEQUNfU0hTUjFfVFNBTVBMRTEpOwogfQpAQCAtMjIxNCw3ICsyMjExLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RBQ19Db252ZXJ0RGF0YTEyUmlnaHRBbGlnbmVkKERBQ19UeXBlRGVmICpEQUN4LCB1aW50MzJfdCBEQUNfQ2hhbm5lbCwgdWludDMyX3QgRGF0YSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5ESFIxMlIxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19ESFIxMlJYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfREhSX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+REhSMTJSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfREhSMTJSWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUykgJiBEQUNfUkVHX0RIUl9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKIAogICBNT0RJRllfUkVHKCpwcmVnLAogICAgICAgICAgICAgIERBQ19ESFIxMlIxX0RBQ0MxREhSLApAQCAtMjIzOSw3ICsyMjM2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RBQ19Db252ZXJ0RGF0YTEyTGVmdEFsaWduZWQoREFDX1R5cGVEZWYgKkRBQ3gsIHVpbnQzMl90IERBQ19DaGFubmVsLCB1aW50MzJfdCBEYXRhKQogewotICByZWdpc3RlciB1aW50MzJfdCAqcHJlZyA9IF9fREFDX1BUUl9SRUdfT0ZGU0VUKERBQ3gtPkRIUjEyUjEsIChEQUNfQ2hhbm5lbCA+PiBEQUNfUkVHX0RIUjEyTFhfUkVHT0ZGU0VUX0JJVE9GRlNFVF9QT1MpICYgREFDX1JFR19ESFJfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5ESFIxMlIxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19ESFIxMkxYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfREhSX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOwogCiAgIE1PRElGWV9SRUcoKnByZWcsCiAgICAgICAgICAgICAgREFDX0RIUjEyTDFfREFDQzFESFIsCkBAIC0yMjY0LDcgKzIyNjEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfREFDX0NvbnZlcnREYXRhOFJpZ2h0QWxpZ25lZChEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERhdGEpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+REhSMTJSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfREhSOFJYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfREhSX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+REhSMTJSMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfREhSOFJYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfREhSX1JFR09GRlNFVF9NQVNLX1BPU0JJVDApOwogCiAgIE1PRElGWV9SRUcoKnByZWcsCiAgICAgICAgICAgICAgREFDX0RIUjhSMV9EQUNDMURIUiwKQEAgLTIzNTIsNyArMjM0OSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfREFDX1JldHJpZXZlT3V0cHV0RGF0YShEQUNfVHlwZURlZiAqREFDeCwgdWludDMyX3QgREFDX0NoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvbnN0ICpwcmVnID0gX19EQUNfUFRSX1JFR19PRkZTRVQoREFDeC0+RE9SMSwgKERBQ19DaGFubmVsID4+IERBQ19SRUdfRE9SWF9SRUdPRkZTRVRfQklUT0ZGU0VUX1BPUykgJiBEQUNfUkVHX0RPUlhfUkVHT0ZGU0VUX01BU0tfUE9TQklUMCk7CisgIF9fSU8gdWludDMyX3QgY29uc3QgKnByZWcgPSBfX0RBQ19QVFJfUkVHX09GRlNFVChEQUN4LT5ET1IxLCAoREFDX0NoYW5uZWwgPj4gREFDX1JFR19ET1JYX1JFR09GRlNFVF9CSVRPRkZTRVRfUE9TKSAmIERBQ19SRUdfRE9SWF9SRUdPRkZTRVRfTUFTS19QT1NCSVQwKTsKIAogICByZXR1cm4gKHVpbnQxNl90KSBSRUFEX0JJVCgqcHJlZywgREFDX0RPUjFfREFDQzFET1IpOwogfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9kbWEuaCBiL0luYy9zdG0zMmc0eHhfbGxfZG1hLmgKaW5kZXggYjYwOTViNy4uYzI5NGJmOSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9kbWEuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2RtYS5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTI3MiwxNyArMjcyLDE3IEBACiAvKiogQGRlZmdyb3VwIERNQV9MTF9FQ19DSEFOTkVMIENIQU5ORUwKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF8xICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUgLyohPCBETUEgQ2hhbm5lbCAxICovCi0jZGVmaW5lIExMX0RNQV9DSEFOTkVMXzIgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVSAvKiE8IERNQSBDaGFubmVsIDIgKi8KLSNkZWZpbmUgTExfRE1BX0NIQU5ORUxfMyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDNVIC8qITwgRE1BIENoYW5uZWwgMyAqLwotI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF80ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFUgLyohPCBETUEgQ2hhbm5lbCA0ICovCi0jZGVmaW5lIExMX0RNQV9DSEFOTkVMXzUgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1VSAvKiE8IERNQSBDaGFubmVsIDUgKi8KLSNkZWZpbmUgTExfRE1BX0NIQU5ORUxfNiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDZVIC8qITwgRE1BIENoYW5uZWwgNiAqLworI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF8xICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgLyohPCBETUEgQ2hhbm5lbCAxICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzIgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVSAvKiE8IERNQSBDaGFubmVsIDIgKi8KKyNkZWZpbmUgTExfRE1BX0NIQU5ORUxfMyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVIC8qITwgRE1BIENoYW5uZWwgMyAqLworI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF80ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwM1UgLyohPCBETUEgQ2hhbm5lbCA0ICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzUgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VSAvKiE8IERNQSBDaGFubmVsIDUgKi8KKyNkZWZpbmUgTExfRE1BX0NIQU5ORUxfNiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDVVIC8qITwgRE1BIENoYW5uZWwgNiAqLwogI2lmIGRlZmluZWQgKERNQTFfQ2hhbm5lbDcpCi0jZGVmaW5lIExMX0RNQV9DSEFOTkVMXzcgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3VSAvKiE8IERNQSBDaGFubmVsIDcgKi8KKyNkZWZpbmUgTExfRE1BX0NIQU5ORUxfNyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDZVIC8qITwgRE1BIENoYW5uZWwgNyAqLwogI2VuZGlmIC8qIERNQTFfQ2hhbm5lbDcgKi8KICNpZiBkZWZpbmVkIChETUExX0NoYW5uZWw4KQotI2RlZmluZSBMTF9ETUFfQ0hBTk5FTF84ICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUgLyohPCBETUEgQ2hhbm5lbCA4ICovCisjZGVmaW5lIExMX0RNQV9DSEFOTkVMXzggICAgICAgICAgICAgICAgICAweDAwMDAwMDA3VSAvKiE8IERNQSBDaGFubmVsIDggKi8KICNlbmRpZiAvKiBETUExX0NoYW5uZWw4ICovCiAjaWYgZGVmaW5lZChVU0VfRlVMTF9MTF9EUklWRVIpCiAjZGVmaW5lIExMX0RNQV9DSEFOTkVMX0FMTCAgICAgICAgICAgICAgICAweEZGRkYwMDAwVSAvKiE8IERNQSBDaGFubmVsIGFsbCAodXNlZCBvbmx5IGZvciBmdW5jdGlvbiBAcmVmIExMX0RNQV9EZUluaXQoKS4gKi8KQEAgLTUxNyw5ICs1MTcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0VuYWJsZUNoYW5uZWwoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBTRVRfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLCBETUFfQ0NSX0VOKTsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICBTRVRfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbF0pKSktPkNDUiwgRE1BX0NDUl9FTik7CiB9CiAKIC8qKgpAQCAtNTQwLDkgKzUzOSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRGlzYWJsZUNoYW5uZWwoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBDTEVBUl9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DQ1IsIERNQV9DQ1JfRU4pOworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIENMRUFSX0JJVCgoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DQ1IsIERNQV9DQ1JfRU4pOwogfQogCiAvKioKQEAgLTU2Myw5ICs1NjEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQV9Jc0VuYWJsZWRDaGFubmVsKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DQ1IsCisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLAogICAgICAgICAgICAgICAgICAgICBETUFfQ0NSX0VOKSA9PSAoRE1BX0NDUl9FTikpID8gMVVMIDogMFVMKTsKIH0KIApAQCAtNjAyLDkgKzU5OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfQ29uZmlnVHJhbnNmZXIoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IENvbmZpZ3VyYXRpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBNT0RJRllfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLAorICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIE1PRElGWV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLAogICAgICAgICAgICAgIERNQV9DQ1JfRElSIHwgRE1BX0NDUl9NRU0yTUVNIHwgRE1BX0NDUl9DSVJDIHwgRE1BX0NDUl9QSU5DIHwgRE1BX0NDUl9NSU5DIHwgRE1BX0NDUl9QU0laRSB8IERNQV9DQ1JfTVNJWkUgfCBETUFfQ0NSX1BMLAogICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24pOwogfQpAQCAtNjMyLDkgKzYyOCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0RGF0YVRyYW5zZmVyRGlyZWN0aW9uKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBEaXJlY3Rpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBNT0RJRllfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLAorICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIE1PRElGWV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLAogICAgICAgICAgICAgIERNQV9DQ1JfRElSIHwgRE1BX0NDUl9NRU0yTUVNLCBEaXJlY3Rpb24pOwogfQogCkBAIC02NjAsOSArNjU1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0RGF0YVRyYW5zZmVyRGlyZWN0aW9uKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgcmV0dXJuIChSRUFEX0JJVCgoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNDUiwKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICByZXR1cm4gKFJFQURfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbF0pKSktPkNDUiwKICAgICAgICAgICAgICAgICAgICBETUFfQ0NSX0RJUiB8IERNQV9DQ1JfTUVNMk1FTSkpOwogfQogCkBAIC02ODksOSArNjgzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXRNb2RlKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBNb2RlKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgTU9ESUZZX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNDUiwgRE1BX0NDUl9DSVJDLAorICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIE1PRElGWV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLCBETUFfQ0NSX0NJUkMsCiAgICAgICAgICAgICAgTW9kZSk7CiB9CiAKQEAgLTcxNSw5ICs3MDgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQV9HZXRNb2RlKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgcmV0dXJuIChSRUFEX0JJVCgoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNDUiwKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICByZXR1cm4gKFJFQURfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbF0pKSktPkNDUiwKICAgICAgICAgICAgICAgICAgICBETUFfQ0NSX0NJUkMpKTsKIH0KIApAQCAtNzQyLDkgKzczNCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0UGVyaXBoSW5jTW9kZShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgUGVyaXBoT3JNMk1TcmNJbmNNb2RlKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgTU9ESUZZX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNDUiwgRE1BX0NDUl9QSU5DLAorICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIE1PRElGWV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLCBETUFfQ0NSX1BJTkMsCiAgICAgICAgICAgICAgUGVyaXBoT3JNMk1TcmNJbmNNb2RlKTsKIH0KIApAQCAtNzY4LDkgKzc1OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldFBlcmlwaEluY01vZGUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICByZXR1cm4gKFJFQURfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLAorICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHJldHVybiAoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLAogICAgICAgICAgICAgICAgICAgIERNQV9DQ1JfUElOQykpOwogfQogCkBAIC03OTUsOSArNzg1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXRNZW1vcnlJbmNNb2RlKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBNZW1vcnlPck0yTURzdEluY01vZGUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBNT0RJRllfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLCBETUFfQ0NSX01JTkMsCisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgTU9ESUZZX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DQ1IsIERNQV9DQ1JfTUlOQywKICAgICAgICAgICAgICBNZW1vcnlPck0yTURzdEluY01vZGUpOwogfQogCkBAIC04MjEsOSArODEwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0TWVtb3J5SW5jTW9kZShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwotCi0gIHJldHVybiAoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DQ1IsCisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgcmV0dXJuIChSRUFEX0JJVCgoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DQ1IsCiAgICAgICAgICAgICAgICAgICAgRE1BX0NDUl9NSU5DKSk7CiB9CiAKQEAgLTg0OSw5ICs4MzcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldFBlcmlwaFNpemUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFBlcmlwaE9yTTJNU3JjRGF0YVNpemUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBNT0RJRllfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLCBETUFfQ0NSX1BTSVpFLAorICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIE1PRElGWV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLCBETUFfQ0NSX1BTSVpFLAogICAgICAgICAgICAgIFBlcmlwaE9yTTJNU3JjRGF0YVNpemUpOwogfQogCkBAIC04NzYsOSArODYzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0UGVyaXBoU2l6ZShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwotCi0gIHJldHVybiAoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DQ1IsCisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgcmV0dXJuIChSRUFEX0JJVCgoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DQ1IsCiAgICAgICAgICAgICAgICAgICAgRE1BX0NDUl9QU0laRSkpOwogfQogCkBAIC05MDQsOSArODkwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXRNZW1vcnlTaXplKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBNZW1vcnlPck0yTURzdERhdGFTaXplKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgTU9ESUZZX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNDUiwgRE1BX0NDUl9NU0laRSwKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICBNT0RJRllfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbF0pKSktPkNDUiwgRE1BX0NDUl9NU0laRSwKICAgICAgICAgICAgICBNZW1vcnlPck0yTURzdERhdGFTaXplKTsKIH0KIApAQCAtOTMxLDkgKzkxNiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldE1lbW9yeVNpemUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICByZXR1cm4gKFJFQURfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLAorICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHJldHVybiAoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLAogICAgICAgICAgICAgICAgICAgIERNQV9DQ1JfTVNJWkUpKTsKIH0KIApAQCAtOTYwLDkgKzk0NCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0Q2hhbm5lbFByaW9yaXR5TGV2ZWwoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFByaW9yaXR5KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgTU9ESUZZX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNDUiwgRE1BX0NDUl9QTCwKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICBNT0RJRllfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbF0pKSktPkNDUiwgRE1BX0NDUl9QTCwKICAgICAgICAgICAgICBQcmlvcml0eSk7CiB9CiAKQEAgLTk4OCw5ICs5NzEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQV9HZXRDaGFubmVsUHJpb3JpdHlMZXZlbChETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwotCi0gIHJldHVybiAoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DQ1IsCisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgcmV0dXJuIChSRUFEX0JJVCgoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DQ1IsCiAgICAgICAgICAgICAgICAgICAgRE1BX0NDUl9QTCkpOwogfQogCkBAIC0xMDE1LDkgKzk5Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0RGF0YUxlbmd0aChETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgTmJEYXRhKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgTU9ESUZZX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNORFRSLAorICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIE1PRElGWV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q05EVFIsCiAgICAgICAgICAgICAgRE1BX0NORFRSX05EVCwgTmJEYXRhKTsKIH0KIApAQCAtMTA0MSw5ICsxMDIyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0RGF0YUxlbmd0aChETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwotCi0gIHJldHVybiAoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DTkRUUiwKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICByZXR1cm4gKFJFQURfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbF0pKSktPkNORFRSLAogICAgICAgICAgICAgICAgICAgIERNQV9DTkRUUl9ORFQpKTsKIH0KIApAQCAtMTA3NSwxOSArMTA1NSwxOSBAQAogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0NvbmZpZ0FkZHJlc3NlcyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgU3JjQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgRHN0QWRkcmVzcywgdWludDMyX3QgRGlyZWN0aW9uKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICAvKiBEaXJlY3Rpb24gTWVtb3J5IHRvIFBlcmlwaCAqLwogICBpZiAoRGlyZWN0aW9uID09IExMX0RNQV9ESVJFQ1RJT05fTUVNT1JZX1RPX1BFUklQSCkKICAgewotICAgIFdSSVRFX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNNQVIsIFNyY0FkZHJlc3MpOwotICAgIFdSSVRFX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNQQVIsIERzdEFkZHJlc3MpOworICAgIFdSSVRFX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DTUFSLCBTcmNBZGRyZXNzKTsKKyAgICBXUklURV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q1BBUiwgRHN0QWRkcmVzcyk7CiAgIH0KICAgLyogRGlyZWN0aW9uIFBlcmlwaCB0byBNZW1vcnkgYW5kIE1lbW9yeSB0byBNZW1vcnkgKi8KICAgZWxzZQogICB7Ci0gICAgV1JJVEVfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q1BBUiwgU3JjQWRkcmVzcyk7Ci0gICAgV1JJVEVfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q01BUiwgRHN0QWRkcmVzcyk7CisgICAgV1JJVEVfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbF0pKSktPkNQQVIsIFNyY0FkZHJlc3MpOworICAgIFdSSVRFX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DTUFSLCBEc3RBZGRyZXNzKTsKICAgfQogfQogCkBAIC0xMTEyLDkgKzEwOTIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldE1lbW9yeUFkZHJlc3MoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IE1lbW9yeUFkZHJlc3MpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBXUklURV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DTUFSLCBNZW1vcnlBZGRyZXNzKTsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICBXUklURV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q01BUiwgTWVtb3J5QWRkcmVzcyk7CiB9CiAKIC8qKgpAQCAtMTEzOCw5ICsxMTE3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXRQZXJpcGhBZGRyZXNzKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBQZXJpcGhBZGRyZXNzKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgV1JJVEVfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q1BBUiwgUGVyaXBoQWRkcmVzcyk7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgV1JJVEVfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbF0pKSktPkNQQVIsIFBlcmlwaEFkZHJlc3MpOwogfQogCiAvKioKQEAgLTExNjIsOSArMTE0MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldE1lbW9yeUFkZHJlc3MoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICByZXR1cm4gKFJFQURfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q01BUikpOworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHJldHVybiAoUkVBRF9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q01BUikpOwogfQogCiAvKioKQEAgLTExODYsOSArMTE2Myw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldFBlcmlwaEFkZHJlc3MoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICByZXR1cm4gKFJFQURfUkVHKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q1BBUikpOworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHJldHVybiAoUkVBRF9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q1BBUikpOwogfQogCiAvKioKQEAgLTEyMTIsOSArMTE4OCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0TTJNU3JjQWRkcmVzcyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgTWVtb3J5QWRkcmVzcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwotCi0gIFdSSVRFX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNQQVIsIE1lbW9yeUFkZHJlc3MpOworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIFdSSVRFX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DUEFSLCBNZW1vcnlBZGRyZXNzKTsKIH0KIAogLyoqCkBAIC0xMjM4LDkgKzEyMTMsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldE0yTURzdEFkZHJlc3MoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IE1lbW9yeUFkZHJlc3MpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBXUklURV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DTUFSLCBNZW1vcnlBZGRyZXNzKTsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICBXUklURV9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q01BUiwgTWVtb3J5QWRkcmVzcyk7CiB9CiAKIC8qKgpAQCAtMTI2Miw5ICsxMjM2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0TTJNU3JjQWRkcmVzcyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwotCi0gIHJldHVybiAoUkVBRF9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DUEFSKSk7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgcmV0dXJuIChSRUFEX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DUEFSKSk7CiB9CiAKIC8qKgpAQCAtMTI4Niw5ICsxMjU5LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0TTJNRHN0QWRkcmVzcyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwotCi0gIHJldHVybiAoUkVBRF9SRUcoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DTUFSKSk7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgcmV0dXJuIChSRUFEX1JFRygoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DTUFSKSk7CiB9CiAKIC8qKgpAQCAtMTMxMyw2ICsxMjg1LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFfQ0hBTk5FTF84ICgqKQogICAqICAgICAgICAgKCopIE5vdCBvbiBhbGwgRzQgZGV2aWNlcwogICAqIEBwYXJhbSAgUGVyaXBoUmVxdWVzdCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfTUVNMk1FTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMgpAQCAtMTQzMyw5ICsxNDA2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXRQZXJpcGhSZXF1ZXN0KERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBQZXJpcGhSZXF1ZXN0KQogewotICBVTlVTRUQoRE1BeCk7Ci0gIE1PRElGWV9SRUcoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKHVpbnQzMl90KSgodWludDMyX3QpRE1BTVVYMV9DaGFubmVsMCArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCAtIDFVKSkpKS0+Q0NSLAotICAgICAgICAgICAgIERNQU1VWF9DeENSX0RNQVJFUV9JRCwgUGVyaXBoUmVxdWVzdCk7CisgIHVpbnQzMl90IGRtYW11eF9jY3Jfb2Zmc2V0ID0gKCgoKHVpbnQzMl90KURNQXggXiAodWludDMyX3QpRE1BMSkgPj4gMTBVKSAqIDhVKTsKKyAgTU9ESUZZX1JFRygoRE1BTVVYMV9DaGFubmVsMCArIENoYW5uZWwgKyBkbWFtdXhfY2NyX29mZnNldCktPkNDUiwgRE1BTVVYX0N4Q1JfRE1BUkVRX0lELCBQZXJpcGhSZXF1ZXN0KTsKIH0KIAogLyoqCkBAIC0xNDU5LDYgKzE0MzEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQV9DSEFOTkVMXzggKCopCiAgICogICAgICAgICAoKikgTm90IG9uIGFsbCBHNCBkZXZpY2VzCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfTUVNMk1FTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMgpAQCAtMTU3OCw5ICsxNTUxLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0UGVyaXBoUmVxdWVzdChETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgVU5VU0VEKERNQXgpOwotICByZXR1cm4gKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKCh1aW50MzJfdClETUFNVVgxX0NoYW5uZWwwICsgKERNQU1VWF9DQ1JfU0laRSAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENoYW5uZWwgLSAxVSkpKSkpLT5DQ1IsIERNQU1VWF9DeENSX0RNQVJFUV9JRCkpOworICB1aW50MzJfdCBkbWFtdXhfY2NyX29mZnNldCA9ICgoKCh1aW50MzJfdClETUF4IF4gKHVpbnQzMl90KURNQTEpID4+IDEwVSkgKiA4VSk7CisgIHJldHVybiAoUkVBRF9CSVQoKERNQU1VWDFfQ2hhbm5lbDAgKyBDaGFubmVsICsgZG1hbXV4X2Njcl9vZmZzZXQpLT5DQ1IsIERNQU1VWF9DeENSX0RNQVJFUV9JRCkpOwogfQogCiAvKioKQEAgLTIzNTIsOSArMjMyNCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRW5hYmxlSVRfVEMoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBTRVRfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLCBETUFfQ0NSX1RDSUUpOworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIFNFVF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLCBETUFfQ0NSX1RDSUUpOwogfQogCiAvKioKQEAgLTIzNzUsOSArMjM0Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRW5hYmxlSVRfSFQoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBTRVRfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLCBETUFfQ0NSX0hUSUUpOworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIFNFVF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLCBETUFfQ0NSX0hUSUUpOwogfQogCiAvKioKQEAgLTIzOTgsOSArMjM2OCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRW5hYmxlSVRfVEUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBTRVRfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLCBETUFfQ0NSX1RFSUUpOworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIFNFVF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLCBETUFfQ0NSX1RFSUUpOwogfQogCiAvKioKQEAgLTI0MjEsOSArMjM5MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRGlzYWJsZUlUX1RDKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgQ0xFQVJfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbCAtIDFVXSkpKS0+Q0NSLCBETUFfQ0NSX1RDSUUpOworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIENMRUFSX0JJVCgoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWxdKSkpLT5DQ1IsIERNQV9DQ1JfVENJRSk7CiB9CiAKIC8qKgpAQCAtMjQ0NCw5ICsyNDEyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9EaXNhYmxlSVRfSFQoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKLQotICBDTEVBUl9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DQ1IsIERNQV9DQ1JfSFRJRSk7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgQ0xFQVJfQklUKCgoRE1BX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyBDSEFOTkVMX09GRlNFVF9UQUJbQ2hhbm5lbF0pKSktPkNDUiwgRE1BX0NDUl9IVElFKTsKIH0KIAogLyoqCkBAIC0yNDY3LDkgKzI0MzQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0Rpc2FibGVJVF9URShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwotCi0gIENMRUFSX0JJVCgoKERNQV9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgQ0hBTk5FTF9PRkZTRVRfVEFCW0NoYW5uZWwgLSAxVV0pKSktPkNDUiwgRE1BX0NDUl9URUlFKTsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICBDTEVBUl9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLCBETUFfQ0NSX1RFSUUpOwogfQogCiAvKioKQEAgLTI0OTAsOSArMjQ1Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0lzRW5hYmxlZElUX1RDKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DQ1IsCisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLAogICAgICAgICAgICAgICAgICAgICBETUFfQ0NSX1RDSUUpID09IChETUFfQ0NSX1RDSUUpKSA/IDFVTCA6IDBVTCk7CiB9CiAKQEAgLTI1MTQsOSArMjQ3OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0lzRW5hYmxlZElUX0hUKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DQ1IsCisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLAogICAgICAgICAgICAgICAgICAgICBETUFfQ0NSX0hUSUUpID09IChETUFfQ0NSX0hUSUUpKSA/IDFVTCA6IDBVTCk7CiB9CiAKQEAgLTI1MzgsOSArMjUwMiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0lzRW5hYmxlZElUX1RFKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7Ci0KLSAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsIC0gMVVdKSkpLT5DQ1IsCisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIENIQU5ORUxfT0ZGU0VUX1RBQltDaGFubmVsXSkpKS0+Q0NSLAogICAgICAgICAgICAgICAgICAgICBETUFfQ0NSX1RFSUUpID09IChETUFfQ0NSX1RFSUUpKSA/IDFVTCA6IDBVTCk7CiB9CiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfZG1hbXV4LmggYi9JbmMvc3RtMzJnNHh4X2xsX2RtYW11eC5oCmluZGV4IDg1NDJmNWIuLjljYzQ1NDggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfZG1hbXV4LmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9kbWFtdXguaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0yNzQsOCArMjc0LDggQEAKICNkZWZpbmUgTExfRE1BTVVYX0NIQU5ORUxfMTEgICAgICAgICAgICAgIDB4MDAwMDAwMEJVICAgICAgICAgICAgICAgLyohPCBETUFNVVggQ2hhbm5lbCAxMSBjb25uZWN0ZWQgdG8gRE1BMiBDaGFubmVsIDQgKi8KICNkZWZpbmUgTExfRE1BTVVYX0NIQU5ORUxfMTIgICAgICAgICAgICAgIDB4MDAwMDAwMENVICAgICAgICAgICAgICAgLyohPCBETUFNVVggQ2hhbm5lbCAxMiBjb25uZWN0ZWQgdG8gRE1BMiBDaGFubmVsIDUgKi8KICNkZWZpbmUgTExfRE1BTVVYX0NIQU5ORUxfMTMgICAgICAgICAgICAgIDB4MDAwMDAwMERVICAgICAgICAgICAgICAgLyohPCBETUFNVVggQ2hhbm5lbCAxMyBjb25uZWN0ZWQgdG8gRE1BMiBDaGFubmVsIDYgKi8KLSNkZWZpbmUgTExfRE1BTVVYX0NIQU5ORUxfMTQgICAgICAgICAgICAgIDB4MDAwMDAwMEVVICAgICAgICAgICAgICAgLyohPCBETUFNVVggQ2hhbm5lbCAxMyBjb25uZWN0ZWQgdG8gRE1BMiBDaGFubmVsIDcgKi8KLSNkZWZpbmUgTExfRE1BTVVYX0NIQU5ORUxfMTUgICAgICAgICAgICAgIDB4MDAwMDAwMEZVICAgICAgICAgICAgICAgLyohPCBETUFNVVggQ2hhbm5lbCAxMyBjb25uZWN0ZWQgdG8gRE1BMiBDaGFubmVsIDggKi8KKyNkZWZpbmUgTExfRE1BTVVYX0NIQU5ORUxfMTQgICAgICAgICAgICAgIDB4MDAwMDAwMEVVICAgICAgICAgICAgICAgLyohPCBETUFNVVggQ2hhbm5lbCAxNCBjb25uZWN0ZWQgdG8gRE1BMiBDaGFubmVsIDcgKi8KKyNkZWZpbmUgTExfRE1BTVVYX0NIQU5ORUxfMTUgICAgICAgICAgICAgIDB4MDAwMDAwMEZVICAgICAgICAgICAgICAgLyohPCBETUFNVVggQ2hhbm5lbCAxNSBjb25uZWN0ZWQgdG8gRE1BMiBDaGFubmVsIDggKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC00MzYsNiArNDM2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVhfQ0hBTk5FTF8xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9DSEFOTkVMXzE1CiAgICogQHBhcmFtICBSZXF1ZXN0IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYX1JFUV9NRU0yTUVNCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYX1JFUV9HRU5FUkFUT1IwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYX1JFUV9HRU5FUkFUT1IxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYX1JFUV9HRU5FUkFUT1IyCkBAIC01NTYsMTUgKzU1NywxMyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX1NldFJlcXVlc3RJRChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBSZXF1ZXN0KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7Ci0KLSAgTU9ESUZZX1JFRygoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKSktPkNDUiwKLSAgICAgICAgICAgICBETUFNVVhfQ3hDUl9ETUFSRVFfSUQsIFJlcXVlc3QpOworICAodm9pZCkoRE1BTVVYeCk7CisgIE1PRElGWV9SRUcoKERNQU1VWDFfQ2hhbm5lbDAgKyBDaGFubmVsKS0+Q0NSLCBETUFNVVhfQ3hDUl9ETUFSRVFfSUQsIFJlcXVlc3QpOwogfQogCiAvKioKICAgKiBAYnJpZWYgIEdldCBETUFNVVggcmVxdWVzdCBJRCBmb3IgRE1BTVVYIENoYW5uZWwgeC4KLSAgKiBAbm90ZSAgIERNQU1VWCBjaGFubmVsIDEgdG8gNyBhcmUgbWFwcGVkIHRvIERNQTEgY2hhbm5lbCAxIHRvIDguCisgICogQG5vdGUgICBETUFNVVggY2hhbm5lbCAwIHRvIDcgYXJlIG1hcHBlZCB0byBETUExIGNoYW5uZWwgMSB0byA4LgogICAqICAgICAgICAgRE1BTVVYIGNoYW5uZWwgOCB0byAxNSBhcmUgbWFwcGVkIHRvIERNQTIgY2hhbm5lbCAxIHRvIDguCiAgICogQHJtdG9sbCBDeENSICAgICAgICAgRE1BUkVRX0lEICAgICBMTF9ETUFNVVhfR2V0UmVxdWVzdElECiAgICogQHBhcmFtICBETUFNVVh4IERNQU1VWHggSW5zdGFuY2UKQEAgLTU4Nyw2ICs1ODYsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9DSEFOTkVMXzE1CiAgICogICAgICAgICAoKikgTm90IG9uIGFsbCBHNCBkZXZpY2VzCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfTUVNMk1FTQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWF9SRVFfR0VORVJBVE9SMgpAQCAtNzA2LDEwICs3MDcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9HZXRSZXF1ZXN0SUQoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwotCi0gIHJldHVybiAoUkVBRF9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCAtIDFVKSkpKSktPkNDUiwKLSAgICAgICAgICAgICAgICAgICBETUFNVVhfQ3hDUl9ETUFSRVFfSUQpKTsKKyAgKHZvaWQpKERNQU1VWHgpOworICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVCgoRE1BTVVYMV9DaGFubmVsMCArIENoYW5uZWwpLT5DQ1IsIERNQU1VWF9DeENSX0RNQVJFUV9JRCkpOwogfQogCiAvKioKQEAgLTczOCwxMCArNzM3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9TZXRTeW5jUmVxdWVzdE5iKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFJlcXVlc3ROYikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwotCi0gIE1PRElGWV9SRUcoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCkpKSkpLT5DQ1IsCi0gICAgICAgICAgICAgRE1BTVVYX0N4Q1JfTkJSRVEsIFJlcXVlc3ROYiAtIDFVKTsKKyAgKHZvaWQpKERNQU1VWHgpOworICBNT0RJRllfUkVHKChETUFNVVgxX0NoYW5uZWwwICsgQ2hhbm5lbCktPkNDUiwgRE1BTVVYX0N4Q1JfTkJSRVEsICgoUmVxdWVzdE5iIC0gMVUpIDw8IERNQU1VWF9DeENSX05CUkVRX1BvcykpOwogfQogCiAvKioKQEAgLTc2OSwxMCArNzY2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfR2V0U3luY1JlcXVlc3ROYihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7Ci0KLSAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCkpKSkpLT5DQ1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQU1VWF9DeENSX05CUkVRKSArIDFVKTsKKyAgKHZvaWQpKERNQU1VWHgpOworICByZXR1cm4gKHVpbnQzMl90KSgoKFJFQURfQklUKChETUFNVVgxX0NoYW5uZWwwICsgQ2hhbm5lbCktPkNDUiwgRE1BTVVYX0N4Q1JfTkJSRVEpKSA+PiBETUFNVVhfQ3hDUl9OQlJFUV9Qb3MpICsgMVUpOwogfQogCiAvKioKQEAgLTgwNSwxMCArODAwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9TZXRTeW5jUG9sYXJpdHkoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgUG9sYXJpdHkpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKLQotICBNT0RJRllfUkVHKCgoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpKS0+Q0NSLAotICAgICAgICAgICAgIERNQU1VWF9DeENSX1NQT0wsIFBvbGFyaXR5KTsKKyAgKHZvaWQpKERNQU1VWHgpOworICBNT0RJRllfUkVHKChETUFNVVgxX0NoYW5uZWwwICsgQ2hhbm5lbCktPkNDUiwgRE1BTVVYX0N4Q1JfU1BPTCwgUG9sYXJpdHkpOwogfQogCiAvKioKQEAgLTg0MCwxMCArODMzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfR2V0U3luY1BvbGFyaXR5KERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKLQotICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKSktPkNDUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BTVVYX0N4Q1JfU1BPTCkpOworICAodm9pZCkoRE1BTVVYeCk7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKChETUFNVVgxX0NoYW5uZWwwICsgQ2hhbm5lbCktPkNDUiwgRE1BTVVYX0N4Q1JfU1BPTCkpOwogfQogCiAvKioKQEAgLTg3MSw5ICs4NjIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX0VuYWJsZUV2ZW50R2VuZXJhdGlvbihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7Ci0KLSAgU0VUX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKSktPkNDUiwgRE1BTVVYX0N4Q1JfRUdFKTsKKyAgKHZvaWQpKERNQU1VWHgpOworICBTRVRfQklUKChETUFNVVgxX0NoYW5uZWwwICsgQ2hhbm5lbCktPkNDUiwgRE1BTVVYX0N4Q1JfRUdFKTsKIH0KIAogLyoqCkBAIC05MDEsMTAgKzg5MSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRGlzYWJsZUV2ZW50R2VuZXJhdGlvbihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7Ci0KLSAgQ0xFQVJfQklUKCgoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpKS0+Q0NSLAotICAgICAgICAgICAgRE1BTVVYX0N4Q1JfRUdFKTsKKyAgKHZvaWQpKERNQU1VWHgpOworICBDTEVBUl9CSVQoKERNQU1VWDFfQ2hhbm5lbDAgKyBDaGFubmVsKS0+Q0NSLCBETUFNVVhfQ3hDUl9FR0UpOwogfQogCiAvKioKQEAgLTkzMiwxMCArOTIwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfSXNFbmFibGVkRXZlbnRHZW5lcmF0aW9uKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKLQotICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKSktPkNDUiwKLSAgICAgICAgICAgICAgICAgICAgRE1BTVVYX0N4Q1JfRUdFKSA9PSAoRE1BTVVYX0N4Q1JfRUdFKSkgPyAxVUwgOiAwVUwpOworICAodm9pZCkoRE1BTVVYeCk7CisgIHJldHVybiAoKFJFQURfQklUKChETUFNVVgxX0NoYW5uZWwwICsgQ2hhbm5lbCktPkNDUiwgRE1BTVVYX0N4Q1JfRUdFKSA9PSAoRE1BTVVYX0N4Q1JfRUdFKSk/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtOTYzLDkgKzk0OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRW5hYmxlU3luYyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7Ci0KLSAgU0VUX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKSktPkNDUiwgRE1BTVVYX0N4Q1JfU0UpOworICAodm9pZCkoRE1BTVVYeCk7CisgIFNFVF9CSVQoKERNQU1VWDFfQ2hhbm5lbDAgKyBDaGFubmVsKS0+Q0NSLCBETUFNVVhfQ3hDUl9TRSk7CiB9CiAKIC8qKgpAQCAtOTkzLDkgKzk3OCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRGlzYWJsZVN5bmMoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwotCi0gIENMRUFSX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKSktPkNDUiwgRE1BTVVYX0N4Q1JfU0UpOworICAodm9pZCkoRE1BTVVYeCk7CisgIENMRUFSX0JJVCgoRE1BTVVYMV9DaGFubmVsMCArIENoYW5uZWwpLT5DQ1IsIERNQU1VWF9DeENSX1NFKTsKIH0KIAogLyoqCkBAIC0xMDIzLDEwICsxMDA3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfSXNFbmFibGVkU3luYyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7Ci0KLSAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCkpKSkpLT5DQ1IsCi0gICAgICAgICAgICAgICAgICAgIERNQU1VWF9DeENSX1NFKSA9PSAoRE1BTVVYX0N4Q1JfU0UpKSA/IDFVTCA6IDBVTCk7CisgICh2b2lkKShETUFNVVh4KTsKKyAgcmV0dXJuICgoUkVBRF9CSVQoKERNQU1VWDFfQ2hhbm5lbDAgKyBDaGFubmVsKS0+Q0NSLCBETUFNVVhfQ3hDUl9TRSkgPT0gKERNQU1VWF9DeENSX1NFKSk/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMTA3NiwxMCArMTA1OCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfU2V0U3luY0lEKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFN5bmNJRCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwotCi0gIE1PRElGWV9SRUcoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hX2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCkpKSkpLT5DQ1IsCi0gICAgICAgICAgICAgRE1BTVVYX0N4Q1JfU1lOQ19JRCwgU3luY0lEKTsKKyAgKHZvaWQpKERNQU1VWHgpOworICBNT0RJRllfUkVHKChETUFNVVgxX0NoYW5uZWwwICsgQ2hhbm5lbCktPkNDUiwgRE1BTVVYX0N4Q1JfU1lOQ19JRCwgU3luY0lEKTsKIH0KIAogLyoqCkBAIC0xMTI4LDEwICsxMTA4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfR2V0U3luY0lEKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKLQotICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKSktPkNDUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BTVVYX0N4Q1JfU1lOQ19JRCkpOworICAodm9pZCkoRE1BTVVYeCk7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKChETUFNVVgxX0NoYW5uZWwwICsgQ2hhbm5lbCktPkNDUiwgRE1BTVVYX0N4Q1JfU1lOQ19JRCkpOwogfQogCiAvKioKQEAgLTExNDcsOSArMTEyNSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRW5hYmxlUmVxdWVzdEdlbihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBSZXF1ZXN0R2VuQ2hhbm5lbCkKIHsKLSAgVU5VU0VEKERNQU1VWHgpOwotICBTRVRfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKSgodWludDMyX3QpKCh1aW50MzJfdClETUFNVVgxX1JlcXVlc3RHZW5lcmF0b3IwICsgKERNQU1VWF9SR0NSX1NJWkUgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSZXF1ZXN0R2VuQ2hhbm5lbCkpKSkpLT5SR0NSLCBETUFNVVhfUkd4Q1JfR0UpOworICAodm9pZCkoRE1BTVVYeCk7CisgIFNFVF9CSVQoKChETUFNVVhfUmVxdWVzdEdlbl9UeXBlRGVmICopKCh1aW50MzJfdCkoKHVpbnQzMl90KURNQU1VWDFfUmVxdWVzdEdlbmVyYXRvcjAgKyAoRE1BTVVYX1JHQ1JfU0laRSAqIChSZXF1ZXN0R2VuQ2hhbm5lbCkpKSkpLT5SR0NSLCBETUFNVVhfUkd4Q1JfR0UpOwogfQogCiAvKioKQEAgLTExNjUsOSArMTE0Miw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRGlzYWJsZVJlcXVlc3RHZW4oRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgUmVxdWVzdEdlbkNoYW5uZWwpCiB7Ci0gIFVOVVNFRChETUFNVVh4KTsKLSAgQ0xFQVJfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKSgodWludDMyX3QpKCh1aW50MzJfdClETUFNVVgxX1JlcXVlc3RHZW5lcmF0b3IwICsgKERNQU1VWF9SR0NSX1NJWkUgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJlcXVlc3RHZW5DaGFubmVsKSkpKSktPlJHQ1IsIERNQU1VWF9SR3hDUl9HRSk7CisgICh2b2lkKShETUFNVVh4KTsKKyAgQ0xFQVJfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKSgodWludDMyX3QpKCh1aW50MzJfdClETUFNVVgxX1JlcXVlc3RHZW5lcmF0b3IwICsgKERNQU1VWF9SR0NSX1NJWkUgKiAoUmVxdWVzdEdlbkNoYW5uZWwpKSkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX0dFKTsKIH0KIAogLyoqCkBAIC0xMTgzLDkgKzExNTksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0VuYWJsZWRSZXF1ZXN0R2VuKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IFJlcXVlc3RHZW5DaGFubmVsKQogewotICBVTlVTRUQoRE1BTVVYeCk7Ci0gIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKSgodWludDMyX3QpKCh1aW50MzJfdClETUFNVVgxX1JlcXVlc3RHZW5lcmF0b3IwICsgKERNQU1VWF9SR0NSX1NJWkUgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUmVxdWVzdEdlbkNoYW5uZWwpKSkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX0dFKSA9PSAoRE1BTVVYX1JHeENSX0dFKSkgPyAxVUwgOiAwVUwpOworICAodm9pZCkoRE1BTVVYeCk7CisgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKSgodWludDMyX3QpKCh1aW50MzJfdClETUFNVVgxX1JlcXVlc3RHZW5lcmF0b3IwICsgKERNQU1VWF9SR0NSX1NJWkUgKiAoUmVxdWVzdEdlbkNoYW5uZWwpKSkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX0dFKSA9PSAoRE1BTVVYX1JHeENSX0dFKSk/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMTg5MCw5ICsxODY1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9FbmFibGVJVF9TTyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7Ci0KLSAgU0VUX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKSktPkNDUiwgRE1BTVVYX0N4Q1JfU09JRSk7CisgICh2b2lkKShETUFNVVh4KTsKKyAgU0VUX0JJVCgoRE1BTVVYMV9DaGFubmVsMCArIENoYW5uZWwpLT5DQ1IsIERNQU1VWF9DeENSX1NPSUUpOwogfQogCiAvKioKQEAgLTE5MjAsMTAgKzE4OTQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX0Rpc2FibGVJVF9TTyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7Ci0KLSAgQ0xFQVJfQklUKCgoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpKS0+Q0NSLAotICAgICAgICAgICAgRE1BTVVYX0N4Q1JfU09JRSk7CisgICh2b2lkKShETUFNVVh4KTsKKyAgQ0xFQVJfQklUKChETUFNVVgxX0NoYW5uZWwwICsgQ2hhbm5lbCktPkNDUiwgRE1BTVVYX0N4Q1JfU09JRSk7CiB9CiAKIC8qKgpAQCAtMTk1MSwxMCArMTkyMyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BTVVYX0lzRW5hYmxlZElUX1NPKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKLQotICByZXR1cm4gKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqKSgodWludDMyX3QpKGRtYV9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpKS0+Q0NSLAotICAgICAgICAgICAgICAgICAgIERNQU1VWF9DeENSX1NPSUUpKTsKKyAgKHZvaWQpKERNQU1VWHgpOworICByZXR1cm4gKCgoUkVBRF9CSVQoKERNQU1VWDFfQ2hhbm5lbDAgKyBDaGFubmVsKS0+Q0NSLCBETUFNVVhfQ3hDUl9TT0lFKSkgPT0gKERNQU1VWF9DeENSX1NPSUUpKT8gMVVMIDogMFVMKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX2V4dGkuaCBiL0luYy9zdG0zMmc0eHhfbGxfZXh0aS5oCmluZGV4IDY1ZmI4MTAuLjRhOWIyN2QgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfZXh0aS5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfZXh0aS5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfZm1hYy5oIGIvSW5jL3N0bTMyZzR4eF9sbF9mbWFjLmgKaW5kZXggOTkzZjdjMS4uYjNmMzM3MSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9mbWFjLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9mbWFjLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9mbWMuaCBiL0luYy9zdG0zMmc0eHhfbGxfZm1jLmgKaW5kZXggNmZiODAwNy4uOGQ5NzQyNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9mbWMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2ZtYy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfZ3Bpby5oIGIvSW5jL3N0bTMyZzR4eF9sbF9ncGlvLmgKaW5kZXggMzJlN2E4Zi4uZTI0MWUzMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9ncGlvLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9ncGlvLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9ocnRpbS5oIGIvSW5jL3N0bTMyZzR4eF9sbF9ocnRpbS5oCmluZGV4IGNiZDI5MWQuLjk4NjVmMWUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfaHJ0aW0uaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2hydGltLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNDcwLDE2ICs0NzAsNiBAQAogCiAvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNpZiBkZWZpbmVkKFVTRV9GVUxMX0xMX0RSSVZFUikKLS8qKiBAZGVmZ3JvdXAgSFJUSU1fTExfRVNfSU5JVCBIUlRJTSBFeHBvcnRlZCBJbml0IHN0cnVjdHVyZQotICAqIEB7Ci0gICovCi0vKiBUTyBCRSBDT01QTEVURUQgKi8KLS8qKgotICAqIEB9Ci0gICovCi0jZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCi0KIC8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIEhSVElNX0xMX0V4cG9ydGVkX0NvbnN0YW50cyBIUlRJTSBFeHBvcnRlZCBDb25zdGFudHMKICAgKiBAewpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9pMmMuaCBiL0luYy9zdG0zMmc0eHhfbGxfaTJjLmgKaW5kZXggN2E2N2ViNC4uODAwMGViNiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9pMmMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2kyYy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfaXdkZy5oIGIvSW5jL3N0bTMyZzR4eF9sbF9pd2RnLmgKaW5kZXggODUzZjRiMy4uNDBmNGFiOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9pd2RnLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9pd2RnLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9scHRpbS5oIGIvSW5jL3N0bTMyZzR4eF9sbF9scHRpbS5oCmluZGV4IGI0OWE2Y2EuLjc4NzQ5MDMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfbHB0aW0uaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX2xwdGltLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX2xwdWFydC5oIGIvSW5jL3N0bTMyZzR4eF9sbF9scHVhcnQuaAppbmRleCBlMWUxMmY0Li41NGQ0OTZmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2xsX2xwdWFydC5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfbHB1YXJ0LmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9vcGFtcC5oIGIvSW5jL3N0bTMyZzR4eF9sbF9vcGFtcC5oCmluZGV4IGYzNmUxYzkuLmM5MzhkZjQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfb3BhbXAuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX29wYW1wLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNzMsNyArNzMsNyBAQAogICAqIEByZXR2YWwgUmVnaXN0ZXIgYWRkcmVzcwogICAqLwogI2RlZmluZSBfX09QQU1QX1BUUl9SRUdfT0ZGU0VUKF9fUkVHX18sIF9fUkVHX09GRlNFVF9fKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKCh1aW50MzJfdCAqKSgodWludDMyX3QpICgodWludDMyX3QpKCYoX19SRUdfXykpICsgKChfX1JFR19PRkZTRVRfXykgPDwgMikpKSkKKyAgKChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkgKCh1aW50MzJfdCkoJihfX1JFR19fKSkgKyAoKF9fUkVHX09GRlNFVF9fKSA8PCAyKSkpKQogCiAKIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9wd3IuaCBiL0luYy9zdG0zMmc0eHhfbGxfcHdyLmgKaW5kZXggNDIyNGI1Yy4uNTEzM2IwYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9wd3IuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX3B3ci5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTEwODcsNyArMTA4Nyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9QV1JfRW5hYmxlR1BJT1B1bGxVcCh1aW50MzJfdCBHUElPLCB1aW50MzJfdCBHUElPTnVtYmVyKQogewotICBTRVRfQklUKCooKHVpbnQzMl90ICopR1BJTyksIEdQSU9OdW1iZXIpOworICBTRVRfQklUKCooKF9fSU8gdWludDMyX3QgKilHUElPKSwgR1BJT051bWJlcik7CiB9CiAKIC8qKgpAQCAtMTEzMCw3ICsxMTMwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1BXUl9EaXNhYmxlR1BJT1B1bGxVcCh1aW50MzJfdCBHUElPLCB1aW50MzJfdCBHUElPTnVtYmVyKQogewotICBDTEVBUl9CSVQoKigodWludDMyX3QgKilHUElPKSwgR1BJT051bWJlcik7CisgIENMRUFSX0JJVCgqKChfX0lPIHVpbnQzMl90ICopR1BJTyksIEdQSU9OdW1iZXIpOwogfQogCiAvKioKQEAgLTExNzMsMTAgKzExNzMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1BXUl9Jc0VuYWJsZWRHUElPUHVsbFVwKHVpbnQzMl90IEdQSU8sIHVpbnQzMl90IEdQSU9OdW1iZXIpCiB7Ci0gIHVpbnQzMl90IHRlbXA7Ci0gIHRlbXAgPSBSRUFEX0JJVCgqKCh1aW50MzJfdCAqKShHUElPKSksIEdQSU9OdW1iZXIpOwotCi0gIHJldHVybiAoKHRlbXAgPT0gKEdQSU9OdW1iZXIpKT8xVTowVSk7CisgIHJldHVybiAoKFJFQURfQklUKCooKF9fSU8gdWludDMyX3QgKilHUElPKSwgR1BJT051bWJlcikgPT0gKEdQSU9OdW1iZXIpKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpAQCAtMTIxOSw4ICsxMjE2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1BXUl9FbmFibGVHUElPUHVsbERvd24odWludDMyX3QgR1BJTywgdWludDMyX3QgR1BJT051bWJlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcCA9ICh1aW50MzJfdCkoR1BJTykgKyA0VTsKLSAgU0VUX0JJVCgqKCh1aW50MzJfdCAqKSh0ZW1wKSksIEdQSU9OdW1iZXIpOworICBTRVRfQklUKCooKF9fSU8gdWludDMyX3QgKikoR1BJTyArIDRVKSksIEdQSU9OdW1iZXIpOwogfQogCiAvKioKQEAgLTEyNjMsOCArMTI1OSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9QV1JfRGlzYWJsZUdQSU9QdWxsRG93bih1aW50MzJfdCBHUElPLCB1aW50MzJfdCBHUElPTnVtYmVyKQogewotICByZWdpc3RlciB1aW50MzJfdCB0ZW1wID0gKHVpbnQzMl90KShHUElPKSArIDRVOwotICBDTEVBUl9CSVQoKigodWludDMyX3QgKikodGVtcCkpLCBHUElPTnVtYmVyKTsKKyAgQ0xFQVJfQklUKCooKF9fSU8gdWludDMyX3QgKikoR1BJTyArIDRVKSksIEdQSU9OdW1iZXIpOwogfQogCiAvKioKQEAgLTEzMDcsMTIgKzEzMDIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1BXUl9Jc0VuYWJsZWRHUElPUHVsbERvd24odWludDMyX3QgR1BJTywgdWludDMyX3QgR1BJT051bWJlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcF9yZWcgPSAodWludDMyX3QpKEdQSU8pICsgNFU7Ci0gIHVpbnQzMl90IHRlbXA7Ci0gIHRlbXAgPSBSRUFEX0JJVCgqKCh1aW50MzJfdCAqKSh0ZW1wX3JlZykpLCBHUElPTnVtYmVyKTsKLQotICByZXR1cm4gKCh0ZW1wID09IChHUElPTnVtYmVyKSk/MVU6MFUpOwotCisgIHJldHVybiAoKFJFQURfQklUKCooKF9fSU8gdWludDMyX3QgKikoR1BJTyArIDRVKSksIEdQSU9OdW1iZXIpID09IChHUElPTnVtYmVyKSkgPyAxVUwgOiAwVUwpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfcmNjLmggYi9JbmMvc3RtMzJnNHh4X2xsX3JjYy5oCmluZGV4IGNlNzQxZDguLjRiMWM4NmUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfcmNjLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9yY2MuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX3JuZy5oIGIvSW5jL3N0bTMyZzR4eF9sbF9ybmcuaAppbmRleCAwYTVmNjM2Li41ODgwYWY1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJnNHh4X2xsX3JuZy5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfcm5nLmgKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9ydGMuaCBiL0luYy9zdG0zMmc0eHhfbGxfcnRjLmgKaW5kZXggMmEwZTcyOC4uM2E1MmU5YiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9ydGMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX3J0Yy5oCkBAIC0zMjUsOCArMzI1LDggQEAKIC8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX0FMQVJNX09VVFBVVFRZUEUgIEFMQVJNIE9VVFBVVCBUWVBFCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfUlRDX0FMQVJNX09VVFBVVFRZUEVfT1BFTkRSQUlOICAweDAwMDAwMDAwVSAgICAgICAgICAgIC8qITwgUlRDX0FMQVJNIGlzIG9wZW4tZHJhaW4gb3V0cHV0ICovCi0jZGVmaW5lIExMX1JUQ19BTEFSTV9PVVRQVVRUWVBFX1BVU0hQVUxMICAgUlRDX0NSX1RBTVBBTFJNX1RZUEUgICAvKiE8IFJUQ19BTEFSTSBpcyBwdXNoLXB1bGwgb3V0cHV0ICovCisjZGVmaW5lIExMX1JUQ19BTEFSTV9PVVRQVVRUWVBFX09QRU5EUkFJTiAgUlRDX0NSX1RBTVBBTFJNX1RZUEUgICAgLyohPCBSVENfQUxBUk0gaXMgb3Blbi1kcmFpbiBvdXRwdXQgKi8KKyNkZWZpbmUgTExfUlRDX0FMQVJNX09VVFBVVFRZUEVfUFVTSFBVTEwgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IFJUQ19BTEFSTSBpcyBwdXNoLXB1bGwgb3V0cHV0ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTQ3NSw4ICsxNDc1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19USU1FX1N5bmNocm9uaXplKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBTaGlmdFNlY29uZCwgdWludDMyX3QgRnJhY3Rpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcCA9IChTaGlmdFNlY29uZCB8IEZyYWN0aW9uKTsKLSAgV1JJVEVfUkVHKFJUQ3gtPlNISUZUUiwgdG1wKTsKKyAgV1JJVEVfUkVHKFJUQ3gtPlNISUZUUiwgKFNoaWZ0U2Vjb25kIHwgRnJhY3Rpb24pKTsKIH0KIAogLyoqCkBAIC0zMTgxLDcgKzMxODAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0JLUF9TZXRSZWdpc3RlcihSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIsIHVpbnQzMl90IERhdGEpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcDsKKyAgcmVnaXN0ZXIgdWludDMyX3QgdG1wID0gMFU7CiAKICAgVU5VU0VEKFJUQ3gpOwogCkBAIC0zMjA2LDcgKzMyMDUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JUQ19CS1BfR2V0UmVnaXN0ZXIoUlRDX1R5cGVEZWYgKlJUQ3gsIHVpbnQzMl90IEJhY2t1cFJlZ2lzdGVyKQogewotICByZWdpc3RlciB1aW50MzJfdCB0bXA7CisgIHJlZ2lzdGVyIHVpbnQzMl90IHRtcCA9IDBVOwogCiAgIFVOVVNFRChSVEN4KTsKIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF9zcGkuaCBiL0luYy9zdG0zMmc0eHhfbGxfc3BpLmgKaW5kZXggNDJmOGQ5Ni4uMTU5YWJhMSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF9zcGkuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX3NwaS5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfc3lzdGVtLmggYi9JbmMvc3RtMzJnNHh4X2xsX3N5c3RlbS5oCmluZGV4IDA5MjIzYTMuLjJmMzIwMmMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfc3lzdGVtLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF9zeXN0ZW0uaApAQCAtMTksNyArMTksNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmc0eHhfbGxfdGltLmggYi9JbmMvc3RtMzJnNHh4X2xsX3RpbS5oCmluZGV4IDFkMDY0MzQuLjg5Yjg0Y2QgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfdGltLmgKKysrIGIvSW5jL3N0bTMyZzR4eF9sbF90aW0uaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0yMTAxLDcgKzIxMDEsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgdGltZXIgY291bnRlciBjb3VudGluZyBtb2RlLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NPVU5URVJfTU9ERV9TRUxFQ1RfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8KKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ09VTlRFUl9NT0RFX1NFTEVDVF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0bwogICAqICAgICAgIGNoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBjb3VudGVyIG1vZGUgc2VsZWN0aW9uIGZlYXR1cmUgaXMgc3VwcG9ydGVkCiAgICogICAgICAgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAbm90ZSBTd2l0Y2hpbmcgZnJvbSBDZW50ZXIgQWxpZ25lZCBjb3VudGVyIG1vZGUgdG8gRWRnZSBjb3VudGVyIG1vZGUgKG9yIHJldmVyc2UpCkBAIC0yMTI1LDcgKzIxMjUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCBhY3R1YWwgY291bnRlciBtb2RlLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NPVU5URVJfTU9ERV9TRUxFQ1RfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8KKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ09VTlRFUl9NT0RFX1NFTEVDVF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0bwogICAqICAgICAgIGNoZWNrIHdoZXRoZXIgb3Igbm90IHRoZSBjb3VudGVyIG1vZGUgc2VsZWN0aW9uIGZlYXR1cmUgaXMgc3VwcG9ydGVkCiAgICogICAgICAgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBESVIgICAgICAgICAgIExMX1RJTV9HZXRDb3VudGVyTW9kZVxuCkBAIC0yMTc4LDcgKzIxNzgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgZGl2aXNpb24gcmF0aW8gYmV0d2VlbiB0aGUgdGltZXIgY2xvY2sgIGFuZCB0aGUgc2FtcGxpbmcgY2xvY2sgdXNlZCBieSB0aGUgZGVhZC10aW1lIGdlbmVyYXRvcnMgKHdoZW4gc3VwcG9ydGVkKSBhbmQgdGhlIGRpZ2l0YWwgZmlsdGVycy4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DTE9DS19ESVZJU0lPTl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9DTE9DS19ESVZJU0lPTl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IHRoZSBjbG9jayBkaXZpc2lvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgdGltZXIKICAgKiAgICAgICBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBDS0QgICAgICAgICAgIExMX1RJTV9TZXRDbG9ja0RpdmlzaW9uCkBAIC0yMTk2LDcgKzIxOTYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgYWN0dWFsIGRpdmlzaW9uIHJhdGlvIGJldHdlZW4gdGhlIHRpbWVyIGNsb2NrICBhbmQgdGhlIHNhbXBsaW5nIGNsb2NrIHVzZWQgYnkgdGhlIGRlYWQtdGltZSBnZW5lcmF0b3JzICh3aGVuIHN1cHBvcnRlZCkgYW5kIHRoZSBkaWdpdGFsIGZpbHRlcnMuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0xPQ0tfRElWSVNJT05fSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0xPQ0tfRElWSVNJT05fSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCB0aGUgY2xvY2sgZGl2aXNpb24gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHRpbWVyCiAgICogICAgICAgaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgQ0tEICAgICAgICAgICBMTF9USU1fR2V0Q2xvY2tEaXZpc2lvbgpAQCAtMjIxMyw3ICsyMjEzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIGNvdW50ZXIgdmFsdWUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgMzIgYml0cyBjb3VudGVyLgogICAqIEBub3RlIElmIGRpdGhlcmluZyBpcyBhY3RpdmF0ZWQsIHBheSBhdHRlbnRpb24gdG8gdGhlIENvdW50ZXIgdmFsdWUgaW50ZXJwcmV0YXRpb24KICAgKiBAcm10b2xsIENOVCAgICAgICAgICBDTlQgICAgICAgICAgIExMX1RJTV9TZXRDb3VudGVyCkBAIC0yMjI4LDcgKzIyMjgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgY291bnRlciB2YWx1ZS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCiAgICogQG5vdGUgSWYgZGl0aGVyaW5nIGlzIGFjdGl2YXRlZCwgcGF5IGF0dGVudGlvbiB0byB0aGUgQ291bnRlciB2YWx1ZSBpbnRlcnByZXRhdGlvbgogICAqIEBybXRvbGwgQ05UICAgICAgICAgIENOVCAgICAgICAgICAgTExfVElNX0dldENvdW50ZXIKQEAgLTIyODMsNyArMjI4Myw3IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgYXV0by1yZWxvYWQgdmFsdWUuCiAgICogQG5vdGUgVGhlIGNvdW50ZXIgaXMgYmxvY2tlZCB3aGlsZSB0aGUgYXV0by1yZWxvYWQgdmFsdWUgaXMgbnVsbC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCiAgICogQG5vdGUgSGVscGVyIG1hY3JvIEByZWYgX19MTF9USU1fQ0FMQ19BUlIgY2FuIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBBdXRvUmVsb2FkIHBhcmFtZXRlcgogICAqICAgICAgIEluIGNhc2UgZGl0aGVyaW5nIGlzIGFjdGl2YXRlZCxtYWNybyBfX0xMX1RJTV9DQUxDX0FSUl9ESVRIRVIgY2FuIGJlIHVzZWQgaW5zdGVhZCwgdG8gY2FsY3VsYXRlIHRoZSBBdXRvUmVsb2FkIHBhcmFtZXRlci4KQEAgLTIzMDAsNyArMjMwMCw3IEBACiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgYXV0by1yZWxvYWQgdmFsdWUuCiAgICogQHJtdG9sbCBBUlIgICAgICAgICAgQVJSICAgICAgICAgICBMTF9USU1fR2V0QXV0b1JlbG9hZAotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIDMyIGJpdHMgY291bnRlci4KICAgKiBAbm90ZSBJZiBkaXRoZXJpbmcgaXMgYWN0aXZhdGVkLCBwYXkgYXR0ZW50aW9uIHRvIHRoZSByZXR1cm5lZCB2YWx1ZSBpbnRlcnByZXRhdGlvbgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjMxNCw3ICsyMzE0LDcgQEAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSByZXBldGl0aW9uIGNvdW50ZXIgdmFsdWUuCiAgICogQG5vdGUgRm9yIGFkdmFuY2VkIHRpbWVyIGluc3RhbmNlcyBSZXBldGl0aW9uQ291bnRlciBjYW4gYmUgdXAgdG8gNjU1MzUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fUkVQRVRJVElPTl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNX1JFUEVUSVRJT05fQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSByZXBldGl0aW9uIGNvdW50ZXIuCiAgICogQHJtdG9sbCBSQ1IgICAgICAgICAgUkVQICAgICAgICAgICBMTF9USU1fU2V0UmVwZXRpdGlvbkNvdW50ZXIKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTIzMjgsNyArMjMyOCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSByZXBldGl0aW9uIGNvdW50ZXIgdmFsdWUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fUkVQRVRJVElPTl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNX1JFUEVUSVRJT05fQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSByZXBldGl0aW9uIGNvdW50ZXIuCiAgICogQHJtdG9sbCBSQ1IgICAgICAgICAgUkVQICAgICAgICAgICBMTF9USU1fR2V0UmVwZXRpdGlvbkNvdW50ZXIKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTIzOTAsNyArMjM5MCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgZGl0aGVyaW5nIGlzIGFjdGl2YXRlZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9ESVRIRVJJTkdfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fRElUSEVSSU5HX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBkaXRoZXJpbmcuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgRElUSEVOICAgICAgICAgIExMX1RJTV9Jc0VuYWJsZWREaXRoZXJpbmcKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI0MTMsNyArMjQxMyw3IEBACiAgICogQG5vdGUgQ0N4RSwgQ0N4TkUgYW5kIE9DeE0gYml0cyBhcmUgcHJlbG9hZGVkLCBhZnRlciBoYXZpbmcgYmVlbiB3cml0dGVuLAogICAqICAgICAgIHRoZXkgYXJlIHVwZGF0ZWQgb25seSB3aGVuIGEgY29tbXV0YXRpb24gZXZlbnQgKENPTSkgb2NjdXJzLgogICAqIEBub3RlIE9ubHkgb24gY2hhbm5lbHMgdGhhdCBoYXZlIGEgY29tcGxlbWVudGFyeSBvdXRwdXQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ09NTVVUQVRJT05fRVZFTlRfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ09NTVVUQVRJT05fRVZFTlRfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIGlzIGFibGUgdG8gZ2VuZXJhdGUgYSBjb21tdXRhdGlvbiBldmVudC4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBDQ1BDICAgICAgICAgIExMX1RJTV9DQ19FbmFibGVQcmVsb2FkCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yNDI2LDcgKzI0MjYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgIHRoZSBjYXB0dXJlL2NvbXBhcmUgY29udHJvbCBiaXRzIChDQ3hFLCBDQ3hORSBhbmQgT0N4TSkgcHJlbG9hZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DT01NVVRBVElPTl9FVkVOVF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9DT01NVVRBVElPTl9FVkVOVF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2UgaXMgYWJsZSB0byBnZW5lcmF0ZSBhIGNvbW11dGF0aW9uIGV2ZW50LgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIENDUEMgICAgICAgICAgTExfVElNX0NDX0Rpc2FibGVQcmVsb2FkCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0yNDM5LDcgKzI0MzksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgdXBkYXRlZCBzb3VyY2Ugb2YgdGhlIGNhcHR1cmUvY29tcGFyZSBjb250cm9sIGJpdHMgKENDeEUsIENDeE5FIGFuZCBPQ3hNKS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DT01NVVRBVElPTl9FVkVOVF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9DT01NVVRBVElPTl9FVkVOVF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2UgaXMgYWJsZSB0byBnZW5lcmF0ZSBhIGNvbW11dGF0aW9uIGV2ZW50LgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIENDVVMgICAgICAgICAgTExfVElNX0NDX1NldFVwZGF0ZQogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMjQ4Myw3ICsyNDgzLDcgQEAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBsb2NrIGxldmVsIHRvIGZyZWV6ZSB0aGUKICAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gb2Ygc2V2ZXJhbCBjYXB0dXJlL2NvbXBhcmUgcGFyYW1ldGVycy4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIHRoZSBsb2NrIG1lY2hhbmlzbSBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAcm10b2xsIEJEVFIgICAgICAgICBMT0NLICAgICAgICAgIExMX1RJTV9DQ19TZXRMb2NrTGV2ZWwKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTI3OTksNyArMjc5OSw3IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgSURMRSBzdGF0ZSBvZiBhbiBvdXRwdXQgY2hhbm5lbAogICAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgc2lnbmlmaWNhbnQgb25seSBmb3IgdGhlIHRpbWVyIGluc3RhbmNlcwotICAqICAgICAgIHN1cHBvcnRpbmcgdGhlIGJyZWFrIGZlYXR1cmUuIE1hY3JvIEByZWYgSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpCisgICogICAgICAgc3VwcG9ydGluZyB0aGUgYnJlYWsgZmVhdHVyZS4gTWFjcm8gSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpCiAgICogICAgICAgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcwogICAqICAgICAgIGEgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICBPSVMxICAgICAgICAgIExMX1RJTV9PQ19TZXRJZGxlU3RhdGVcbgpAQCAtMzAyNyw3ICszMDI3LDcgQEAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIGNsZWFyaW5nIHRoZSBvdXRwdXQgY2hhbm5lbCBvbiBhbiBleHRlcm5hbCBldmVudC4KICAgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgaW4gT3V0cHV0IGNvbXBhcmUgYW5kIFBXTSBtb2Rlcy4gSXQgZG9lcyBub3Qgd29yayBpbiBGb3JjZWQgbW9kZS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9PQ1hSRUZfQ0xFQVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlcgorICAqIEBub3RlIE1hY3JvIElTX1RJTV9PQ1hSRUZfQ0xFQVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlcgogICAqICAgICAgIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIGNhbiBjbGVhciB0aGUgT0N4UkVGIHNpZ25hbCBvbiBhbiBleHRlcm5hbCBldmVudC4KICAgKiBAcm10b2xsIENDTVIxICAgICAgICBPQzFDRSAgICAgICAgICBMTF9USU1fT0NfRW5hYmxlQ2xlYXJcbgogICAqICAgICAgICAgQ0NNUjEgICAgICAgIE9DMkNFICAgICAgICAgIExMX1RJTV9PQ19FbmFibGVDbGVhclxuCkBAIC0zMDU0LDcgKzMwNTQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgY2xlYXJpbmcgdGhlIG91dHB1dCBjaGFubmVsIG9uIGFuIGV4dGVybmFsIGV2ZW50LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX09DWFJFRl9DTEVBUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyCisgICogQG5vdGUgTWFjcm8gSVNfVElNX09DWFJFRl9DTEVBUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyCiAgICogICAgICAgb3Igbm90IGEgdGltZXIgaW5zdGFuY2UgY2FuIGNsZWFyIHRoZSBPQ3hSRUYgc2lnbmFsIG9uIGFuIGV4dGVybmFsIGV2ZW50LgogICAqIEBybXRvbGwgQ0NNUjEgICAgICAgIE9DMUNFICAgICAgICAgIExMX1RJTV9PQ19EaXNhYmxlQ2xlYXJcbgogICAqICAgICAgICAgQ0NNUjEgICAgICAgIE9DMkNFICAgICAgICAgIExMX1RJTV9PQ19EaXNhYmxlQ2xlYXJcbgpAQCAtMzA4Myw3ICszMDgzLDcgQEAKICAgKiBAYnJpZWYgIEluZGljYXRlcyBjbGVhcmluZyB0aGUgb3V0cHV0IGNoYW5uZWwgb24gYW4gZXh0ZXJuYWwgZXZlbnQgaXMgZW5hYmxlZCBmb3IgdGhlIG91dHB1dCBjaGFubmVsLgogICAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBjbGVhcmluZyB0aGUgb3V0cHV0IGNoYW5uZWwgb24gYW4gZXh0ZXJuYWwgZXZlbnQuCiAgICogQG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIE91dHB1dCBjb21wYXJlIGFuZCBQV00gbW9kZXMuIEl0IGRvZXMgbm90IHdvcmsgaW4gRm9yY2VkIG1vZGUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fT0NYUkVGX0NMRUFSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fT0NYUkVGX0NMRUFSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIKICAgKiAgICAgICBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBjYW4gY2xlYXIgdGhlIE9DeFJFRiBzaWduYWwgb24gYW4gZXh0ZXJuYWwgZXZlbnQuCiAgICogQHJtdG9sbCBDQ01SMSAgICAgICAgT0MxQ0UgICAgICAgICAgTExfVElNX09DX0lzRW5hYmxlZENsZWFyXG4KICAgKiAgICAgICAgIENDTVIxICAgICAgICBPQzJDRSAgICAgICAgICBMTF9USU1fT0NfSXNFbmFibGVkQ2xlYXJcbgpAQCAtMzExMSw3ICszMTExLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIGRlYWQtdGltZSBkZWxheSAoZGVsYXkgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgcmlzaW5nIGVkZ2Ugb2YgdGhlIE9DeFJFRiBzaWduYWwgYW5kIHRoZSByaXNpbmcgZWRnZSBvZiB0aGUgT2N4IGFuZCBPQ3hOIHNpZ25hbHMpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0JSRUFLX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgZGVhZC10aW1lIGluc2VydGlvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSBhIHRpbWVyIGluc3RhbmNlLgogICAqIEBub3RlIEhlbHBlciBtYWNybyBAcmVmIF9fTExfVElNX0NBTENfREVBRFRJTUUgY2FuIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBEZWFkVGltZSBwYXJhbWV0ZXIKICAgKiBAcm10b2xsIEJEVFIgICAgICAgICBEVEcgICAgICAgICAgIExMX1RJTV9PQ19TZXREZWFkVGltZQpAQCAtMzEyNyw5ICszMTI3LDkgQEAKIC8qKgogICAqIEBicmllZiAgU2V0IGNvbXBhcmUgdmFsdWUgZm9yIG91dHB1dCBjaGFubmVsIDEgKFRJTXhfQ0NSMSkuCiAgICogQG5vdGUgSW4gMzItYml0IHRpbWVyIGltcGxlbWVudGF0aW9ucyBjb21wYXJlIHZhbHVlIGNhbiBiZSBiZXR3ZWVuIDB4MDAwMDAwMDAgYW5kIDB4RkZGRkZGRkYuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgMzIgYml0cyBjb3VudGVyLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NDMV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9DQzFfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBvdXRwdXQgY2hhbm5lbCAxIGlzIHN1cHBvcnRlZCBieSBhIHRpbWVyIGluc3RhbmNlLgogICAqIEBub3RlIElmIGRpdGhlcmluZyBpcyBhY3RpdmF0ZWQsIENvbXBhcmVWYWx1ZSBjYW4gYmUgY2FsY3VsYXRlZCB3aXRoIG1hY3JvIEByZWYgX19MTF9USU1fQ0FMQ19ERUxBWV9ESVRIRVIgLgogICAqIEBybXRvbGwgQ0NSMSAgICAgICAgIENDUjEgICAgICAgICAgTExfVElNX09DX1NldENvbXBhcmVDSDEKQEAgLTMxNDUsOSArMzE0NSw5IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCBjb21wYXJlIHZhbHVlIGZvciBvdXRwdXQgY2hhbm5lbCAyIChUSU14X0NDUjIpLgogICAqIEBub3RlIEluIDMyLWJpdCB0aW1lciBpbXBsZW1lbnRhdGlvbnMgY29tcGFyZSB2YWx1ZSBjYW4gYmUgYmV0d2VlbiAweDAwMDAwMDAwIGFuZCAweEZGRkZGRkZGLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIDMyIGJpdHMgY291bnRlci4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DQzJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0MyX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgb3V0cHV0IGNoYW5uZWwgMiBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAbm90ZSBJZiBkaXRoZXJpbmcgaXMgYWN0aXZhdGVkLCBDb21wYXJlVmFsdWUgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aCBtYWNybyBAcmVmIF9fTExfVElNX0NBTENfREVMQVlfRElUSEVSIC4KICAgKiBAcm10b2xsIENDUjIgICAgICAgICBDQ1IyICAgICAgICAgIExMX1RJTV9PQ19TZXRDb21wYXJlQ0gyCkBAIC0zMTYzLDkgKzMxNjMsOSBAQAogLyoqCiAgICogQGJyaWVmICBTZXQgY29tcGFyZSB2YWx1ZSBmb3Igb3V0cHV0IGNoYW5uZWwgMyAoVElNeF9DQ1IzKS4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MzX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDM19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIGlzIHN1cHBvcnRlZCBieSBhIHRpbWVyIGluc3RhbmNlLgogICAqIEBub3RlIElmIGRpdGhlcmluZyBpcyBhY3RpdmF0ZWQsIENvbXBhcmVWYWx1ZSBjYW4gYmUgY2FsY3VsYXRlZCB3aXRoIG1hY3JvIEByZWYgX19MTF9USU1fQ0FMQ19ERUxBWV9ESVRIRVIgLgogICAqIEBybXRvbGwgQ0NSMyAgICAgICAgIENDUjMgICAgICAgICAgTExfVElNX09DX1NldENvbXBhcmVDSDMKQEAgLTMxODEsOSArMzE4MSw5IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCBjb21wYXJlIHZhbHVlIGZvciBvdXRwdXQgY2hhbm5lbCA0IChUSU14X0NDUjQpLgogICAqIEBub3RlIEluIDMyLWJpdCB0aW1lciBpbXBsZW1lbnRhdGlvbnMgY29tcGFyZSB2YWx1ZSBjYW4gYmUgYmV0d2VlbiAweDAwMDAwMDAwIGFuZCAweEZGRkZGRkZGLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIDMyIGJpdHMgY291bnRlci4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DQzRfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0M0X0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgb3V0cHV0IGNoYW5uZWwgNCBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAbm90ZSBJZiBkaXRoZXJpbmcgaXMgYWN0aXZhdGVkLCBDb21wYXJlVmFsdWUgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aCBtYWNybyBAcmVmIF9fTExfVElNX0NBTENfREVMQVlfRElUSEVSIC4KICAgKiBAcm10b2xsIENDUjQgICAgICAgICBDQ1I0ICAgICAgICAgIExMX1RJTV9PQ19TZXRDb21wYXJlQ0g0CkBAIC0zMTk4LDcgKzMxOTgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCBjb21wYXJlIHZhbHVlIGZvciBvdXRwdXQgY2hhbm5lbCA1IChUSU14X0NDUjUpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NDNV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9DQzVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBvdXRwdXQgY2hhbm5lbCA1IGlzIHN1cHBvcnRlZCBieSBhIHRpbWVyIGluc3RhbmNlLgogICAqIEBub3RlIElmIGRpdGhlcmluZyBpcyBhY3RpdmF0ZWQsIENvbXBhcmVWYWx1ZSBjYW4gYmUgY2FsY3VsYXRlZCB3aXRoIG1hY3JvIEByZWYgX19MTF9USU1fQ0FMQ19ERUxBWV9ESVRIRVIgLgogICAqIEBybXRvbGwgQ0NSNSAgICAgICAgIENDUjUgICAgICAgICAgTExfVElNX09DX1NldENvbXBhcmVDSDUKQEAgLTMyMTMsNyArMzIxMyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IGNvbXBhcmUgdmFsdWUgZm9yIG91dHB1dCBjaGFubmVsIDYgKFRJTXhfQ0NSNikuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0M2X0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDNl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDYgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQG5vdGUgSWYgZGl0aGVyaW5nIGlzIGFjdGl2YXRlZCwgQ29tcGFyZVZhbHVlIGNhbiBiZSBjYWxjdWxhdGVkIHdpdGggbWFjcm8gQHJlZiBfX0xMX1RJTV9DQUxDX0RFTEFZX0RJVEhFUiAuCiAgICogQHJtdG9sbCBDQ1I2ICAgICAgICAgQ0NSNiAgICAgICAgICBMTF9USU1fT0NfU2V0Q29tcGFyZUNINgpAQCAtMzIyOSw5ICszMjI5LDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNvbXBhcmUgdmFsdWUgKFRJTXhfQ0NSMSkgc2V0IGZvciAgb3V0cHV0IGNoYW5uZWwgMS4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MxX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDMV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDEgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQG5vdGUgSWYgZGl0aGVyaW5nIGlzIGFjdGl2YXRlZCwgcGF5IGF0dGVudGlvbiB0byB0aGUgcmV0dXJuZWQgdmFsdWUgaW50ZXJwcmV0YXRpb24uCiAgICogQHJtdG9sbCBDQ1IxICAgICAgICAgQ0NSMSAgICAgICAgICBMTF9USU1fT0NfR2V0Q29tcGFyZUNIMQpAQCAtMzI0Niw5ICszMjQ2LDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNvbXBhcmUgdmFsdWUgKFRJTXhfQ0NSMikgc2V0IGZvciAgb3V0cHV0IGNoYW5uZWwgMi4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MyX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDIgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQG5vdGUgSWYgZGl0aGVyaW5nIGlzIGFjdGl2YXRlZCwgcGF5IGF0dGVudGlvbiB0byB0aGUgcmV0dXJuZWQgdmFsdWUgaW50ZXJwcmV0YXRpb24uCiAgICogQHJtdG9sbCBDQ1IyICAgICAgICAgQ0NSMiAgICAgICAgICBMTF9USU1fT0NfR2V0Q29tcGFyZUNIMgpAQCAtMzI2Myw5ICszMjYzLDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNvbXBhcmUgdmFsdWUgKFRJTXhfQ0NSMykgc2V0IGZvciAgb3V0cHV0IGNoYW5uZWwgMy4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MzX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDM19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDMgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQG5vdGUgSWYgZGl0aGVyaW5nIGlzIGFjdGl2YXRlZCwgcGF5IGF0dGVudGlvbiB0byB0aGUgcmV0dXJuZWQgdmFsdWUgaW50ZXJwcmV0YXRpb24uCiAgICogQHJtdG9sbCBDQ1IzICAgICAgICAgQ0NSMyAgICAgICAgICBMTF9USU1fT0NfR2V0Q29tcGFyZUNIMwpAQCAtMzI4MCw5ICszMjgwLDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNvbXBhcmUgdmFsdWUgKFRJTXhfQ0NSNCkgc2V0IGZvciAgb3V0cHV0IGNoYW5uZWwgNC4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNvbXBhcmUgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0M0X0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDNF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIG91dHB1dCBjaGFubmVsIDQgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQG5vdGUgSWYgZGl0aGVyaW5nIGlzIGFjdGl2YXRlZCwgcGF5IGF0dGVudGlvbiB0byB0aGUgcmV0dXJuZWQgdmFsdWUgaW50ZXJwcmV0YXRpb24uCiAgICogQHJtdG9sbCBDQ1I0ICAgICAgICAgQ0NSNCAgICAgICAgICBMTF9USU1fT0NfR2V0Q29tcGFyZUNINApAQCAtMzI5Niw3ICszMjk2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgY29tcGFyZSB2YWx1ZSAoVElNeF9DQ1I1KSBzZXQgZm9yICBvdXRwdXQgY2hhbm5lbCA1LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NDNV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9DQzVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBvdXRwdXQgY2hhbm5lbCA1IGlzIHN1cHBvcnRlZCBieSBhIHRpbWVyIGluc3RhbmNlLgogICAqIEBub3RlIElmIGRpdGhlcmluZyBpcyBhY3RpdmF0ZWQsIHBheSBhdHRlbnRpb24gdG8gdGhlIHJldHVybmVkIHZhbHVlIGludGVycHJldGF0aW9uLgogICAqIEBybXRvbGwgQ0NSNSAgICAgICAgIENDUjUgICAgICAgICAgTExfVElNX09DX0dldENvbXBhcmVDSDUKQEAgLTMzMTAsNyArMzMxMCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IGNvbXBhcmUgdmFsdWUgKFRJTXhfQ0NSNikgc2V0IGZvciAgb3V0cHV0IGNoYW5uZWwgNi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DQzZfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0M2X0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgb3V0cHV0IGNoYW5uZWwgNiBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAbm90ZSBJZiBkaXRoZXJpbmcgaXMgYWN0aXZhdGVkLCBwYXkgYXR0ZW50aW9uIHRvIHRoZSByZXR1cm5lZCB2YWx1ZSBpbnRlcnByZXRhdGlvbi4KICAgKiBAcm10b2xsIENDUjYgICAgICAgICBDQ1I2ICAgICAgICAgIExMX1RJTV9PQ19HZXRDb21wYXJlQ0g2CkBAIC0zMzI0LDcgKzMzMjQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbGVjdCBvbiB3aGljaCByZWZlcmVuY2Ugc2lnbmFsIHRoZSBPQzVSRUYgaXMgY29tYmluZWQgdG8uCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ09NQklORUQzUEhBU0VQV01fSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ09NQklORUQzUEhBU0VQV01fSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIHRoZSBjb21iaW5lZCAzLXBoYXNlIFBXTSBtb2RlLgogICAqIEBybXRvbGwgQ0NSNSAgICAgICAgIEdDNUMzICAgICAgICAgIExMX1RJTV9TZXRDSDVDb21iaW5lZENoYW5uZWxzXG4KICAgKiAgICAgICAgIENDUjUgICAgICAgICBHQzVDMiAgICAgICAgICBMTF9USU1fU2V0Q0g1Q29tYmluZWRDaGFubmVsc1xuCkBAIC0zMzQ0LDcgKzMzNDQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgcHVsc2Ugb24gY29tcGFyZSBwdWxzZSB3aWR0aCBwcmVzY2FsZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fUFVMU0VPTkNPTVBBUkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fUFVMU0VPTkNPTVBBUkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCB0aGUgcHVsc2Ugb24gY29tcGFyZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgdGltZXIKICAgKiAgICAgICBpbnN0YW5jZS4KICAgKiBAcm10b2xsIEVDUiAgICAgICAgICBQV1BSU0MgICAgICAgICAgIExMX1RJTV9PQ19TZXRQdWxzZVdpZHRoUHJlc2NhbGVyCkBAIC0zMzY3LDcgKzMzNjcsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgcHVsc2Ugb24gY29tcGFyZSBwdWxzZSB3aWR0aCBwcmVzY2FsZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fUFVMU0VPTkNPTVBBUkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fUFVMU0VPTkNPTVBBUkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCB0aGUgcHVsc2Ugb24gY29tcGFyZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgdGltZXIKICAgKiAgICAgICBpbnN0YW5jZS4KICAgKiBAcm10b2xsIEVDUiAgICAgICAgICBQV1BSU0MgICAgICAgICAgIExMX1RJTV9PQ19HZXRQdWxzZVdpZHRoUHJlc2NhbGVyCkBAIC0zMzg5LDcgKzMzODksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgcHVsc2Ugb24gY29tcGFyZSBwdWxzZSB3aWR0aCBkdXJhdGlvbi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9QVUxTRU9OQ09NUEFSRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9QVUxTRU9OQ09NUEFSRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IHRoZSBwdWxzZSBvbiBjb21wYXJlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSB0aW1lcgogICAqICAgICAgIGluc3RhbmNlLgogICAqIEBybXRvbGwgRUNSICAgICAgICAgIFBXICAgICAgICAgICBMTF9USU1fT0NfU2V0UHVsc2VXaWR0aApAQCAtMzQwNCw3ICszNDA0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIHB1bHNlIG9uIGNvbXBhcmUgcHVsc2Ugd2lkdGggZHVyYXRpb24uCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fUFVMU0VPTkNPTVBBUkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fUFVMU0VPTkNPTVBBUkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCB0aGUgcHVsc2Ugb24gY29tcGFyZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgdGltZXIKICAgKiAgICAgICBpbnN0YW5jZS4KICAgKiBAcm10b2xsIEVDUiAgICAgICAgICBQVyAgICAgICAgICAgTExfVElNX09DX0dldFB1bHNlV2lkdGgKQEAgLTM3MDIsNyArMzcwMiw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29ubmVjdCB0aGUgVElNeF9DSDEsIENIMiBhbmQgQ0gzIHBpbnMgIHRvIHRoZSBUSTEgaW5wdXQgKFhPUiBjb21iaW5hdGlvbikuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fWE9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX1hPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYW4gWE9SIGlucHV0LgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIFRJMVMgICAgICAgICAgTExfVElNX0lDX0VuYWJsZVhPUkNvbWJpbmF0aW9uCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0zNzE1LDcgKzM3MTUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2Nvbm5lY3QgdGhlIFRJTXhfQ0gxLCBDSDIgYW5kIENIMyBwaW5zICBmcm9tIHRoZSBUSTEgaW5wdXQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fWE9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX1hPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYW4gWE9SIGlucHV0LgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIFRJMVMgICAgICAgICAgTExfVElNX0lDX0Rpc2FibGVYT1JDb21iaW5hdGlvbgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMzcyOCw3ICszNzI4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgVElNeF9DSDEsIENIMiBhbmQgQ0gzIHBpbnMgYXJlIGNvbm5lY3RlY3RlZCB0byB0aGUgVEkxIGlucHV0LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1hPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9YT1JfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGFuIFhPUiBpbnB1dC4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBUSTFTICAgICAgICAgIExMX1RJTV9JQ19Jc0VuYWJsZWRYT1JDb21iaW5hdGlvbgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMzc0Miw5ICszNzQyLDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNhcHR1cmVkIHZhbHVlIGZvciBpbnB1dCBjaGFubmVsIDEuCiAgICogQG5vdGUgSW4gMzItYml0IHRpbWVyIGltcGxlbWVudGF0aW9ucyByZXR1cm5lZCBjYXB0dXJlZCB2YWx1ZSBjYW4gYmUgYmV0d2VlbiAweDAwMDAwMDAwIGFuZCAweEZGRkZGRkZGLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIDMyIGJpdHMgY291bnRlci4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DQzFfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0MxX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgaW5wdXQgY2hhbm5lbCAxIGlzIHN1cHBvcnRlZCBieSBhIHRpbWVyIGluc3RhbmNlLgogICAqIEBub3RlIElmIGRpdGhlcmluZyBpcyBhY3RpdmF0ZWQsIHBheSBhdHRlbnRpb24gdG8gdGhlIHJldHVybmVkIHZhbHVlIGludGVycHJldGF0aW9uLgogICAqIEBybXRvbGwgQ0NSMSAgICAgICAgIENDUjEgICAgICAgICAgTExfVElNX0lDX0dldENhcHR1cmVDSDEKQEAgLTM3NTksOSArMzc1OSw5IEBACiAvKioKICAgKiBAYnJpZWYgIEdldCBjYXB0dXJlZCB2YWx1ZSBmb3IgaW5wdXQgY2hhbm5lbCAyLgogICAqIEBub3RlIEluIDMyLWJpdCB0aW1lciBpbXBsZW1lbnRhdGlvbnMgcmV0dXJuZWQgY2FwdHVyZWQgdmFsdWUgY2FuIGJlIGJldHdlZW4gMHgwMDAwMDAwMCBhbmQgMHhGRkZGRkZGRi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgYSAzMiBiaXRzIGNvdW50ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0MyX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0NDMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGlucHV0IGNoYW5uZWwgMiBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAbm90ZSBJZiBkaXRoZXJpbmcgaXMgYWN0aXZhdGVkLCBwYXkgYXR0ZW50aW9uIHRvIHRoZSByZXR1cm5lZCB2YWx1ZSBpbnRlcnByZXRhdGlvbi4KICAgKiBAcm10b2xsIENDUjIgICAgICAgICBDQ1IyICAgICAgICAgIExMX1RJTV9JQ19HZXRDYXB0dXJlQ0gyCkBAIC0zNzc2LDkgKzM3NzYsOSBAQAogLyoqCiAgICogQGJyaWVmICBHZXQgY2FwdHVyZWQgdmFsdWUgZm9yIGlucHV0IGNoYW5uZWwgMy4KICAgKiBAbm90ZSBJbiAzMi1iaXQgdGltZXIgaW1wbGVtZW50YXRpb25zIHJldHVybmVkIGNhcHR1cmVkIHZhbHVlIGNhbiBiZSBiZXR3ZWVuIDB4MDAwMDAwMDAgYW5kIDB4RkZGRkZGRkYuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fMzJCX0NPVU5URVJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgMzIgYml0cyBjb3VudGVyLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0NDM19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9DQzNfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBpbnB1dCBjaGFubmVsIDMgaXMgc3VwcG9ydGVkIGJ5IGEgdGltZXIgaW5zdGFuY2UuCiAgICogQG5vdGUgSWYgZGl0aGVyaW5nIGlzIGFjdGl2YXRlZCwgcGF5IGF0dGVudGlvbiB0byB0aGUgcmV0dXJuZWQgdmFsdWUgaW50ZXJwcmV0YXRpb24uCiAgICogQHJtdG9sbCBDQ1IzICAgICAgICAgQ0NSMyAgICAgICAgICBMTF9USU1fSUNfR2V0Q2FwdHVyZUNIMwpAQCAtMzc5Myw5ICszNzkzLDkgQEAKIC8qKgogICAqIEBicmllZiAgR2V0IGNhcHR1cmVkIHZhbHVlIGZvciBpbnB1dCBjaGFubmVsIDQuCiAgICogQG5vdGUgSW4gMzItYml0IHRpbWVyIGltcGxlbWVudGF0aW9ucyByZXR1cm5lZCBjYXB0dXJlZCB2YWx1ZSBjYW4gYmUgYmV0d2VlbiAweDAwMDAwMDAwIGFuZCAweEZGRkZGRkZGLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNXzMyQl9DT1VOVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBhIDMyIGJpdHMgY291bnRlci4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DQzRfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0M0X0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgaW5wdXQgY2hhbm5lbCA0IGlzIHN1cHBvcnRlZCBieSBhIHRpbWVyIGluc3RhbmNlLgogICAqIEBub3RlIElmIGRpdGhlcmluZyBpcyBhY3RpdmF0ZWQsIHBheSBhdHRlbnRpb24gdG8gdGhlIHJldHVybmVkIHZhbHVlIGludGVycHJldGF0aW9uLgogICAqIEBybXRvbGwgQ0NSNCAgICAgICAgIENDUjQgICAgICAgICAgTExfVElNX0lDX0dldENhcHR1cmVDSDQKQEAgLTM4MTcsNyArMzgxNyw3IEBACiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBleHRlcm5hbCBjbG9jayBtb2RlIDIuCiAgICogQG5vdGUgV2hlbiBleHRlcm5hbCBjbG9jayBtb2RlIDIgaXMgZW5hYmxlZCB0aGUgY291bnRlciBpcyBjbG9ja2VkIGJ5IGFueSBhY3RpdmUgZWRnZSBvbiB0aGUgRVRSRiBzaWduYWwuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGV4dGVybmFsIGNsb2NrIG1vZGUyLgogICAqIEBybXRvbGwgU01DUiAgICAgICAgIEVDRSAgICAgICAgICAgTExfVElNX0VuYWJsZUV4dGVybmFsQ2xvY2sKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTM4MzAsNyArMzgzMCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBleHRlcm5hbCBjbG9jayBtb2RlIDIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGV4dGVybmFsIGNsb2NrIG1vZGUyLgogICAqIEBybXRvbGwgU01DUiAgICAgICAgIEVDRSAgICAgICAgICAgTExfVElNX0Rpc2FibGVFeHRlcm5hbENsb2NrCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC0zODQzLDcgKzM4NDMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIHdoZXRoZXIgZXh0ZXJuYWwgY2xvY2sgbW9kZSAyIGlzIGVuYWJsZWQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGV4dGVybmFsIGNsb2NrIG1vZGUyLgogICAqIEBybXRvbGwgU01DUiAgICAgICAgIEVDRSAgICAgICAgICAgTExfVElNX0lzRW5hYmxlZEV4dGVybmFsQ2xvY2sKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTM4NjAsOSArMzg2MCw5IEBACiAgICogICAgICAgdGhlIGV4dGVybmFsIGNsb2NrIGlzIGFwcGxpZWQgaXMgc2VsZWN0ZWQgYnkgY2FsbGluZyB0aGUgQHJlZiBMTF9USU1fU2V0VHJpZ2dlcklucHV0KCkKICAgKiAgICAgICBmdW5jdGlvbi4gVGhpcyB0aW1lciBpbnB1dCBtdXN0IGJlIGNvbmZpZ3VyZWQgYnkgY2FsbGluZwogICAqICAgICAgIHRoZSBAcmVmIExMX1RJTV9JQ19Db25maWcoKSBmdW5jdGlvbi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgZXh0ZXJuYWwgY2xvY2sgbW9kZTEuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQ0xPQ0tTT1VSQ0VfRVRSTU9ERTJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGV4dGVybmFsIGNsb2NrIG1vZGUyLgogICAqIEBybXRvbGwgU01DUiAgICAgICAgIFNNUyAgICAgICAgICAgTExfVElNX1NldENsb2NrU291cmNlXG4KICAgKiAgICAgICAgIFNNQ1IgICAgICAgICBFQ0UgICAgICAgICAgIExMX1RJTV9TZXRDbG9ja1NvdXJjZQpAQCAtMzg4MCw3ICszODgwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIGVuY29kZXIgaW50ZXJmYWNlIG1vZGUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIHRoZSBlbmNvZGVyIG1vZGUuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgU01TICAgICAgICAgICBMTF9USU1fU2V0RW5jb2Rlck1vZGUKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTM5MTAsNyArMzkxMCw3IEBACiAgICovCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgdHJpZ2dlciBvdXRwdXQgKFRSR08pIHVzZWQgZm9yIHRpbWVyIHN5bmNocm9uaXphdGlvbiAuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fTUFTVEVSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNX01BU1RFUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2UgY2FuIG9wZXJhdGUgYXMgYSBtYXN0ZXIgdGltZXIuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgTU1TICAgICAgICAgICBMTF9USU1fU2V0VHJpZ2dlck91dHB1dAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMzkzMyw3ICszOTMzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIHRyaWdnZXIgb3V0cHV0IDIgKFRSR08yKSB1c2VkIGZvciBBREMgc3luY2hyb25pemF0aW9uIC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9UUkdPMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9UUkdPMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2UgY2FuIGJlIHVzZWQgZm9yIEFEQyBzeW5jaHJvbml6YXRpb24uCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgTU1TMiAgICAgICAgICBMTF9USU1fU2V0VHJpZ2dlck91dHB1dDIKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgSW5zdGFuY2UKQEAgLTM5NjMsNyArMzk2Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBzeW5jaHJvbml6YXRpb24gbW9kZSBvZiBhIHNsYXZlIHRpbWVyLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1NMQVZFX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX1NMQVZFX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBjYW4gb3BlcmF0ZSBhcyBhIHNsYXZlIHRpbWVyLgogICAqIEBybXRvbGwgU01DUiAgICAgICAgIFNNUyAgICAgICAgICAgTExfVElNX1NldFNsYXZlTW9kZQogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtMzk4Myw3ICszOTgzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgdGhlIHNlbGVjdHMgdGhlIHRyaWdnZXIgaW5wdXQgdG8gYmUgdXNlZCB0byBzeW5jaHJvbml6ZSB0aGUgY291bnRlci4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9TTEFWRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9TTEFWRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgY2FuIG9wZXJhdGUgYXMgYSBzbGF2ZSB0aW1lci4KICAgKiBAcm10b2xsIFNNQ1IgICAgICAgICBUUyAgICAgICAgICAgIExMX1RJTV9TZXRUcmlnZ2VySW5wdXQKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQwMTMsNyArNDAxMyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBNYXN0ZXIvU2xhdmUgbW9kZS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9TTEFWRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9TTEFWRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgY2FuIG9wZXJhdGUgYXMgYSBzbGF2ZSB0aW1lci4KICAgKiBAcm10b2xsIFNNQ1IgICAgICAgICBNU00gICAgICAgICAgIExMX1RJTV9FbmFibGVNYXN0ZXJTbGF2ZU1vZGUKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQwMjYsNyArNDAyNiw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSB0aGUgTWFzdGVyL1NsYXZlIG1vZGUuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fU0xBVkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fU0xBVkVfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIGNhbiBvcGVyYXRlIGFzIGEgc2xhdmUgdGltZXIuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgTVNNICAgICAgICAgICBMTF9USU1fRGlzYWJsZU1hc3RlclNsYXZlTW9kZQogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNDAzOSw3ICs0MDM5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmIEluZGljYXRlcyB3aGV0aGVyIHRoZSBNYXN0ZXIvU2xhdmUgbW9kZSBpcyBlbmFibGVkLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1NMQVZFX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX1NMQVZFX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogYSB0aW1lciBpbnN0YW5jZSBjYW4gb3BlcmF0ZSBhcyBhIHNsYXZlIHRpbWVyLgogICAqIEBybXRvbGwgU01DUiAgICAgICAgIE1TTSAgICAgICAgICAgTExfVElNX0lzRW5hYmxlZE1hc3RlclNsYXZlTW9kZQogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNDA1Miw3ICs0MDUyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgdGhlIGV4dGVybmFsIHRyaWdnZXIgKEVUUikgaW5wdXQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fRVRSX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0VUUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYW4gZXh0ZXJuYWwgdHJpZ2dlciBpbnB1dC4KICAgKiBAcm10b2xsIFNNQ1IgICAgICAgICBFVFAgICAgICAgICAgIExMX1RJTV9Db25maWdFVFJcbgogICAqICAgICAgICAgU01DUiAgICAgICAgIEVUUFMgICAgICAgICAgTExfVElNX0NvbmZpZ0VUUlxuCkBAIC00MDkzLDcgKzQwOTMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbGVjdCB0aGUgZXh0ZXJuYWwgdHJpZ2dlciAoRVRSKSBpbnB1dCBzb3VyY2UuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fRVRSU0VMX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3IKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fRVRSU0VMX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3IKICAgKiAgICAgICBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyBFVFIgc291cmNlIHNlbGVjdGlvbi4KICAgKiBAcm10b2xsIEFGMSAgICAgICAgICBFVFJTRUwgICAgICAgIExMX1RJTV9TZXRFVFJTb3VyY2UKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQyMjEsNyArNDIyMSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFNNUyBwcmVsb2FkLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1NNU19QUkVMT0FEX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNX1NNU19QUkVMT0FEX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyB0aGUgcHJlbG9hZCBvZiBTTVMgZmllbGQgaW4gU01DUiByZWdpc3Rlci4KICAgKiBAcm10b2xsIFNNQ1IgICAgICAgICBTTVNQRSAgICAgICAgICAgTExfVElNX0VuYWJsZVNNU1ByZWxvYWQKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQyMzQsNyArNDIzNCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBTTVMgcHJlbG9hZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9TTVNfUFJFTE9BRF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjaworICAqIEBub3RlIE1hY3JvIElTX1RJTV9TTVNfUFJFTE9BRF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjawogICAqICAgICAgIHdoZXRoZXIgb3Igbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgdGhlIHByZWxvYWQgb2YgU01TIGZpZWxkIGluIFNNQ1IgcmVnaXN0ZXIuCiAgICogQHJtdG9sbCBTTUNSICAgICAgICAgU01TUEUgICAgICAgICAgIExMX1RJTV9EaXNhYmxlU01TUHJlbG9hZAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNDI0Nyw3ICs0MjQ3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB3aGV0aGVyICBTTVMgcHJlbG9hZCBpcyBlbmFibGVkLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1NNU19QUkVMT0FEX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNX1NNU19QUkVMT0FEX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyB0aGUgcHJlbG9hZCBvZiBTTVMgZmllbGQgaW4gU01DUiByZWdpc3Rlci4KICAgKiBAcm10b2xsIFNNQ1IgICAgICAgICBTTVNQRSAgICAgICAgICAgTExfVElNX0lzRW5hYmxlZFNNU1ByZWxvYWQKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQyNjAsNyArNDI2MCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBwcmVsb2FkIHNvdXJjZSBvZiBTTVMuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fU01TX1BSRUxPQURfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fU01TX1BSRUxPQURfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIHRoZSBwcmVsb2FkIG9mIFNNUyBmaWVsZCBpbiBTTUNSIHJlZ2lzdGVyLgogICAqIEBybXRvbGwgU01DUiAgICAgICAgIFNNU1BTICAgICAgICBMTF9USU1fU2V0U01TUHJlbG9hZFNvdXJjZVxuCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC00Mjc2LDcgKzQyNzYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgcHJlbG9hZCBzb3VyY2Ugb2YgU01TLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1NNU19QUkVMT0FEX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCisgICogQG5vdGUgTWFjcm8gSVNfVElNX1NNU19QUkVMT0FEX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrCiAgICogICAgICAgd2hldGhlciBvciBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyB0aGUgcHJlbG9hZCBvZiBTTVMgZmllbGQgaW4gU01DUiByZWdpc3Rlci4KICAgKiBAcm10b2xsIFNNQ1IgICAgICAgICBTTVNQUyAgICAgICAgTExfVElNX0dldFNNU1ByZWxvYWRTb3VyY2VcbgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNDI5OCw3ICs0Mjk4LDcgQEAKICAgKi8KIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBicmVhayBmdW5jdGlvbi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYSBicmVhayBpbnB1dC4KICAgKiBAcm10b2xsIEJEVFIgICAgICAgICBCS0UgICAgICAgICAgIExMX1RJTV9FbmFibGVCUksKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQzMTMsNyArNDMxMyw3IEBACiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBicmVhayBmdW5jdGlvbi4KICAgKiBAcm10b2xsIEJEVFIgICAgICAgICBCS0UgICAgICAgICAgIExMX1RJTV9EaXNhYmxlQlJLCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC00MzI0LDEwICs0MzI0LDEwIEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBicmVhayBpbnB1dC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYSBicmVhayBpbnB1dC4KICAgKiBAbm90ZSBCaWRpcmVjdGlvbmFsIG1vZGUgaXMgb25seSBzdXBwb3J0ZWQgYnkgYWR2YW5jZWQgdGltZXIgaW5zdGFuY2VzLgotICAqICAgICAgIE1hY3JvIEByZWYgSVNfVElNX0FEVkFOQ0VEX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogICAgICAgTWFjcm8gSVNfVElNX0FEVkFOQ0VEX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBpcyBhbiBhZHZhbmNlZC1jb250cm9sIHRpbWVyLgogICAqIEBub3RlIEluIGJpZGlyZWN0aW9uYWwgbW9kZSAoQktCSUQgYml0IHNldCksIHRoZSBCcmVhayBpbnB1dCBpcyBjb25maWd1cmVkIGJvdGgKICAgKiAgICAgICAgaW4gaW5wdXQgbW9kZSBhbmQgaW4gb3BlbiBkcmFpbiBvdXRwdXQgbW9kZS4gQW55IGFjdGl2ZSBCcmVhayBldmVudCB3aWxsCkBAIC00Mzk5LDcgKzQzOTksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgYnJlYWsgMiBmdW5jdGlvbi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CS0lOMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CS0lOMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYSBzZWNvbmQgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgQksyRSAgICAgICAgICBMTF9USU1fRW5hYmxlQlJLMgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNDQxMiw3ICs0NDEyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBicmVhayAgMiBmdW5jdGlvbi4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CS0lOMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CS0lOMl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYSBzZWNvbmQgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgQksyRSAgICAgICAgICBMTF9USU1fRGlzYWJsZUJSSzIKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQ0MjUsMTAgKzQ0MjUsMTAgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgdGhlIGJyZWFrIDIgaW5wdXQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQktJTjJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQktJTjJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgc2Vjb25kIGJyZWFrIGlucHV0LgogICAqIEBub3RlIEJpZGlyZWN0aW9uYWwgbW9kZSBpcyBvbmx5IHN1cHBvcnRlZCBieSBhZHZhbmNlZCB0aW1lciBpbnN0YW5jZXMuCi0gICogICAgICAgTWFjcm8gQHJlZiBJU19USU1fQURWQU5DRURfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiAgICAgICBNYWNybyBJU19USU1fQURWQU5DRURfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIGlzIGFuIGFkdmFuY2VkLWNvbnRyb2wgdGltZXIuCiAgICogQG5vdGUgSW4gYmlkaXJlY3Rpb25hbCBtb2RlIChCSzJCSUQgYml0IHNldCksIHRoZSBCcmVhayAyIGlucHV0IGlzIGNvbmZpZ3VyZWQgYm90aAogICAqICAgICAgICBpbiBpbnB1dCBtb2RlIGFuZCBpbiBvcGVuIGRyYWluIG91dHB1dCBtb2RlLiBBbnkgYWN0aXZlIEJyZWFrIGV2ZW50IHdpbGwKQEAgLTQ1MDAsNyArNDUwMCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2VsZWN0IHRoZSBvdXRwdXRzIG9mZiBzdGF0ZSAoZW5hYmxlZCB2LnMuIGRpc2FibGVkKSBpbiBJZGxlIGFuZCBSdW4gbW9kZXMuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgT1NTSSAgICAgICAgICBMTF9USU1fU2V0T2ZmU3RhdGVzXG4KICAgKiAgICAgICAgIEJEVFIgICAgICAgICBPU1NSICAgICAgICAgIExMX1RJTV9TZXRPZmZTdGF0ZXMKQEAgLTQ1MjAsNyArNDUyMCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIGF1dG9tYXRpYyBvdXRwdXQgKE1PRSBjYW4gYmUgc2V0IGJ5IHNvZnR3YXJlIG9yIGF1dG9tYXRpY2FsbHkgd2hlbiBhIGJyZWFrIGlucHV0IGlzIGFjdGl2ZSkuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgQU9FICAgICAgICAgICBMTF9USU1fRW5hYmxlQXV0b21hdGljT3V0cHV0CiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC00NTMzLDcgKzQ1MzMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgYXV0b21hdGljIG91dHB1dCAoTU9FIGNhbiBiZSBzZXQgb25seSBieSBzb2Z0d2FyZSkuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgQU9FICAgICAgICAgICBMTF9USU1fRGlzYWJsZUF1dG9tYXRpY091dHB1dAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNDU0Niw3ICs0NTQ2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB3aGV0aGVyIGF1dG9tYXRpYyBvdXRwdXQgaXMgZW5hYmxlZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYSBicmVhayBpbnB1dC4KICAgKiBAcm10b2xsIEJEVFIgICAgICAgICBBT0UgICAgICAgICAgIExMX1RJTV9Jc0VuYWJsZWRBdXRvbWF0aWNPdXRwdXQKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQ1NjEsNyArNDU2MSw3IEBACiAgICogQGJyaWVmICBFbmFibGUgdGhlIG91dHB1dHMgKHNldCB0aGUgTU9FIGJpdCBpbiBUSU14X0JEVFIgcmVnaXN0ZXIpLgogICAqIEBub3RlIFRoZSBNT0UgYml0IGluIFRJTXhfQkRUUiByZWdpc3RlciBhbGxvd3MgdG8gZW5hYmxlIC9kaXNhYmxlIHRoZSBvdXRwdXRzIGJ5CiAgICogICAgICAgc29mdHdhcmUgYW5kIGlzIHJlc2V0IGluIGNhc2Ugb2YgYnJlYWsgb3IgYnJlYWsyIGV2ZW50Ci0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgTU9FICAgICAgICAgICBMTF9USU1fRW5hYmxlQWxsT3V0cHV0cwogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNDU3Niw3ICs0NTc2LDcgQEAKICAgKiBAYnJpZWYgIERpc2FibGUgdGhlIG91dHB1dHMgKHJlc2V0IHRoZSBNT0UgYml0IGluIFRJTXhfQkRUUiByZWdpc3RlcikuCiAgICogQG5vdGUgVGhlIE1PRSBiaXQgaW4gVElNeF9CRFRSIHJlZ2lzdGVyIGFsbG93cyB0byBlbmFibGUgL2Rpc2FibGUgdGhlIG91dHB1dHMgYnkKICAgKiAgICAgICBzb2Z0d2FyZSBhbmQgaXMgcmVzZXQgaW4gY2FzZSBvZiBicmVhayBvciBicmVhazIgZXZlbnQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCiAgICogQHJtdG9sbCBCRFRSICAgICAgICAgTU9FICAgICAgICAgICBMTF9USU1fRGlzYWJsZUFsbE91dHB1dHMKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQ1ODksNyArNDU4OSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgb3V0cHV0cyBhcmUgZW5hYmxlZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYSBicmVhayBpbnB1dC4KICAgKiBAcm10b2xsIEJEVFIgICAgICAgICBNT0UgICAgICAgICAgIExMX1RJTV9Jc0VuYWJsZWRBbGxPdXRwdXRzCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC00NjAyLDcgKzQ2MDIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSB0aGUgc2lnbmFscyBjb25uZWN0ZWQgdG8gdGhlIGRlc2lnbmF0ZWQgdGltZXIgYnJlYWsgaW5wdXQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtTT1VSQ0VfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlcgorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS1NPVVJDRV9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyCiAgICogICAgICAgb3Igbm90IGEgdGltZXIgaW5zdGFuY2UgYWxsb3dzIGZvciBicmVhayBpbnB1dCBzZWxlY3Rpb24uCiAgICogQHJtdG9sbCBBRjEgICAgICAgICAgQktJTkUgICAgICAgICBMTF9USU1fRW5hYmxlQnJlYWtJbnB1dFNvdXJjZVxuCiAgICogICAgICAgICBBRjEgICAgICAgICAgQktDTVAxRSAgICAgICBMTF9USU1fRW5hYmxlQnJlYWtJbnB1dFNvdXJjZVxuCkBAIC00NjQ1LDcgKzQ2NDUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgdGhlIHNpZ25hbHMgY29ubmVjdGVkIHRvIHRoZSBkZXNpZ25hdGVkIHRpbWVyIGJyZWFrIGlucHV0LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0JSRUFLU09VUkNFX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtTT1VSQ0VfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlcgogICAqICAgICAgIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIGFsbG93cyBmb3IgYnJlYWsgaW5wdXQgc2VsZWN0aW9uLgogICAqIEBybXRvbGwgQUYxICAgICAgICAgIEJLSU5FICAgICAgICAgTExfVElNX0Rpc2FibGVCcmVha0lucHV0U291cmNlXG4KICAgKiAgICAgICAgIEFGMSAgICAgICAgICBCS0NNUDFFICAgICAgIExMX1RJTV9EaXNhYmxlQnJlYWtJbnB1dFNvdXJjZVxuCkBAIC00Njg4LDcgKzQ2ODgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgcG9sYXJpdHkgb2YgdGhlIGJyZWFrIHNpZ25hbCBmb3IgdGhlIHRpbWVyIGJyZWFrIGlucHV0LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0JSRUFLU09VUkNFX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtTT1VSQ0VfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlcgogICAqICAgICAgIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIGFsbG93cyBmb3IgYnJlYWsgaW5wdXQgc2VsZWN0aW9uLgogICAqIEBybXRvbGwgQUYxICAgICAgICAgIEJLSU5QICAgICAgICAgTExfVElNX1NldEJyZWFrSW5wdXRTb3VyY2VQb2xhcml0eVxuCiAgICogICAgICAgICBBRjEgICAgICAgICAgQktDTVAxUCAgICAgICBMTF9USU1fU2V0QnJlYWtJbnB1dFNvdXJjZVBvbGFyaXR5XG4KQEAgLTQ3NDksNyArNDc0OSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgYXN5bW1ldHJpY2FsIGRlYWR0aW1lIGlzIGFjdGl2YXRlZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9ERUFEVElNRV9BU1lNTUVUUklDQUxfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fREVBRFRJTUVfQVNZTU1FVFJJQ0FMX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhc3ltbWV0cmljYWwgZGVhZHRpbWUuCiAgICogQHJtdG9sbCBEVFIyICAgICAgICAgIERUQUUgICAgICAgICAgTExfVElNX0lzRW5hYmxlZEFzeW1tZXRyaWNhbERlYWRUaW1lCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC00NzYyLDcgKzQ3NjIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgZmFsbGluZyBlZ2RlIGRlYWQtdGltZSBkZWxheSAoZGVsYXkgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgZmFsbGluZyBlZGdlIG9mIHRoZSBPQ3hSRUYgc2lnbmFsIGFuZCB0aGUgcmlzaW5nIGVkZ2Ugb2YgT0N4TiBzaWduYWxzKS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9ERUFEVElNRV9BU1lNTUVUUklDQUxfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fREVBRFRJTUVfQVNZTU1FVFJJQ0FMX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYXN5bW1ldHJpY2FsIGRlYWQtdGltZSBpbnNlcnRpb24gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgYSB0aW1lciBpbnN0YW5jZS4KICAgKiBAbm90ZSBIZWxwZXIgbWFjcm8gQHJlZiBfX0xMX1RJTV9DQUxDX0RFQURUSU1FIGNhbiBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgRGVhZFRpbWUgcGFyYW1ldGVyCiAgICogQG5vdGUgVGhpcyBiaXQtZmllbGQgY2FuIG5vdCBiZSBtb2RpZmllZCBhcyBsb25nIGFzIExPQ0sgbGV2ZWwgMSwgMiBvciAzIGhhcyBiZWVuIHByb2dyYW1tZWQKQEAgLTQ3NzksNyArNDc3OSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBmYWxsaW5nIGVnZGUgZGVhZC10aW1lIGRlbGF5IChkZWxheSBpbnNlcnRlZCBiZXR3ZWVuIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgdGhlIE9DeFJFRiBzaWduYWwgYW5kIHRoZSByaXNpbmcgZWRnZSBvZiBPQ3hOIHNpZ25hbHMpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0RFQURUSU1FX0FTWU1NRVRSSUNBTF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9ERUFEVElNRV9BU1lNTUVUUklDQUxfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhc3ltbWV0cmljYWwgZGVhZC10aW1lIGluc2VydGlvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSBhIHRpbWVyIGluc3RhbmNlLgogICAqIEBub3RlIFRoaXMgYml0LWZpZWxkIGNhbiBub3QgYmUgbW9kaWZpZWQgYXMgbG9uZyBhcyBMT0NLIGxldmVsIDEsIDIgb3IgMyBoYXMgYmVlbiBwcm9ncmFtbWVkCiAgICogICAgICAgKExPQ0sgYml0cyBpbiBUSU14X0JEVFIgcmVnaXN0ZXIpLgpAQCAtNDgyMCw3ICs0ODIwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZXMgd2hldGhlciBkZWFkdGltZSBwcmVsb2FkIGlzIGFjdGl2YXRlZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9CUkVBS19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgZGVhZHRpbWUgcHJlbG9hZC4KICAgKiBAcm10b2xsIERUUjIgICAgICAgICAgRFRQRSAgICAgICAgICBMTF9USU1fSXNFbmFibGVkRGVhZFRpbWVQcmVsb2FkCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC00ODQwLDcgKzQ4NDAsNyBAQAogICAqLwogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSB0aW1lciBETUEgYnVyc3QgZmVhdHVyZS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9ETUFCVVJTVF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yCisgICogQG5vdGUgTWFjcm8gSVNfVElNX0RNQUJVUlNUX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3IKICAgKiAgICAgICBub3QgYSB0aW1lciBpbnN0YW5jZSBzdXBwb3J0cyB0aGUgRE1BIGJ1cnN0IG1vZGUuCiAgICogQHJtdG9sbCBEQ1IgICAgICAgICAgREJMICAgICAgICAgICBMTF9USU1fQ29uZmlnRE1BQnVyc3RcbgogICAqICAgICAgICAgRENSICAgICAgICAgIERCQSAgICAgICAgICAgTExfVElNX0NvbmZpZ0RNQUJ1cnN0CkBAIC00OTE3LDcgKzQ5MTcsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBlbmNvZGVyIGluZGV4LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0lOREVYX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0lOREVYX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhbiBpbmRleCBpbnB1dC4KICAgKiBAcm10b2xsIEVDUiAgICAgICAgIElFICAgICAgICAgICBMTF9USU1fRW5hYmxlRW5jb2RlckluZGV4CiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC00OTMwLDcgKzQ5MzAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgZW5jb2RlciBpbmRleC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYW4gaW5kZXggaW5wdXQuCiAgICogQHJtdG9sbCBFQ1IgICAgICAgICBJRSAgICAgICAgICAgTExfVElNX0Rpc2FibGVFbmNvZGVySW5kZXgKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQ5NDMsNyArNDk0Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgd2hldGhlciBlbmNvZGVyIGluZGV4IGlzIGVuYWJsZWQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fSU5ERVhfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fSU5ERVhfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGFuIGluZGV4IGlucHV0LgogICAqIEBybXRvbGwgRUNSICAgICAgICAgSUUgICAgICAgICAgIExMX1RJTV9Jc0VuYWJsZWRFbmNvZGVySW5kZXgKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQ5NTYsNyArNDk1Niw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IGluZGV4IGRpcmVjdGlvbgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0lOREVYX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0lOREVYX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhbiBpbmRleCBpbnB1dC4KICAgKiBAcm10b2xsIEVDUiAgICAgICAgICBJRElSICAgICAgICAgICBMTF9USU1fU2V0SW5kZXhEaXJlY3Rpb24KICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTQ5NzMsNyArNDk3Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IGFjdHVhbCBpbmRleCBkaXJlY3Rpb24KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYW4gaW5kZXggaW5wdXQuCiAgICogQHJtdG9sbCBFQ1IgICAgICAgICAgSURJUiAgICAgICAgICAgTExfVElNX0dldEluZGV4RGlyZWN0aW9uCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC00OTg5LDcgKzQ5ODksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBmaXJzdCBpbmRleC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYW4gaW5kZXggaW5wdXQuCiAgICogQHJtdG9sbCBFQ1IgICAgICAgICAgRklEWCAgICAgICAgICBMTF9USU1fRW5hYmxlRmlyc3RJbmRleAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNTAwMiw3ICs1MDAyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIGZpcnN0IGluZGV4LgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0lOREVYX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0lOREVYX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhbiBpbmRleCBpbnB1dC4KICAgKiBAcm10b2xsIEVDUiAgICAgICAgICBGSURYICAgICAgICAgIExMX1RJTV9EaXNhYmxlRmlyc3RJbmRleAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNTAxNSw3ICs1MDE1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZXMgd2hldGhlciBmaXJzdCBpbmRleCBpcyBlbmFibGVkLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0lOREVYX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0lOREVYX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBhbiBpbmRleCBpbnB1dC4KICAgKiBAcm10b2xsIEVDUiAgICAgICAgICBGSURYICAgICAgICAgIExMX1RJTV9Jc0VuYWJsZWRGaXJzdEluZGV4CiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC01MDI4LDcgKzUwMjgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCBpbmRleCBwb3NpdGlvbm5pbmcKLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYW4gaW5kZXggaW5wdXQuCiAgICogQHJtdG9sbCBFQ1IgICAgICAgICAgSVBPUyAgICAgICAgICAgTExfVElNX1NldEluZGV4UG9zaXRpb25uaW5nCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC01MDQ4LDcgKzUwNDgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCBhY3R1YWwgaW5kZXggcG9zaXRpb25uaW5nCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fSU5ERVhfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fSU5ERVhfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGFuIGluZGV4IGlucHV0LgogICAqIEBybXRvbGwgRUNSICAgICAgICAgIElQT1MgICAgICAgICAgIExMX1RJTV9HZXRJbmRleFBvc2l0aW9ubmluZwogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNTA2Nyw3ICs1MDY3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgZW5jb2RlciBpbmRleC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9JTkRFWF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgYW4gaW5kZXggaW5wdXQuCiAgICogQHJtdG9sbCBFQ1IgICAgICAgICAgSURJUiAgICAgICAgICBMTF9USU1fQ29uZmlnSURYXG4KICAgKiAgICAgICAgIEVDUiAgICAgICAgICBGSURYICAgICAgICAgIExMX1RJTV9Db25maWdJRFhcbgpAQCAtNTA5Myw3ICs1MDkzLDcgQEAKICAgKi8KIC8qKgogICAqIEBicmllZiAgUmVtYXAgVElNIGlucHV0cyAoaW5wdXQgY2hhbm5lbCwgaW50ZXJuYWwvZXh0ZXJuYWwgdHJpZ2dlcnMpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX1JFTUFQX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX1JFTUFQX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSBzb21lIHRpbWVyIGlucHV0cyBjYW4gYmUgcmVtYXBwZWQuCiAgICogQHJtdG9sbCBUSU0xX1RJU0VMICAgIFRJMVNFTCAgICAgIExMX1RJTV9TZXRSZW1hcFxuCiAgICogICAgICAgICBUSU0yX1RJU0VMICAgIFRJMVNFTCAgICAgIExMX1RJTV9TZXRSZW1hcFxuCkBAIC01MzUyLDcgKzUzNTIsNyBAQAogICAqIEBicmllZiAgU2V0IHRoZSBPQ1JFRiBjbGVhciBpbnB1dCBzb3VyY2UKICAgKiBAbm90ZSBUaGUgT0N4UkVGIHNpZ25hbCBvZiBhIGdpdmVuIGNoYW5uZWwgY2FuIGJlIGNsZWFyZWQgd2hlbiBhIGhpZ2ggbGV2ZWwgaXMgYXBwbGllZCBvbiB0aGUgT0NSRUZfQ0xSX0lOUFVUCiAgICogQG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIGluIE91dHB1dCBjb21wYXJlIGFuZCBQV00gbW9kZXMuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fT0NDU19JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyCisgICogQG5vdGUgTWFjcm8gSVNfVElNX09DQ1NfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlcgogICAqICAgICAgIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIGNhbiBjb25maWd1cmUgT0NSRUYgY2xlYXIgaW5wdXQgc291cmNlLgogICAqIEBybXRvbGwgU01DUiAgICAgICAgICBPQ0NTICAgICAgICAgICAgICAgIExMX1RJTV9TZXRPQ1JlZkNsZWFySW5wdXRTb3VyY2UKICAgKiBAcm10b2xsIEFGMiAgICAgICAgICAgT0NSU0VMICAgICAgICAgICAgICBMTF9USU1fU2V0T0NSZWZDbGVhcklucHV0U291cmNlCkBAIC01NzM3LDcgKzU3MzcsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIHRoZSB0cmFuc2l0aW9uIGVycm9yIGludGVycnVwdCBmbGFnIChURVJSRikuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fRU5DT0RFUl9FUlJPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9FTkNPREVSX0VSUk9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBlbmNvZGVyIGVycm9yIG1hbmFnZW1lbnQuCiAgICogQHJtdG9sbCBTUiAgICAgICAgICAgVEVSUkYgICAgICAgICAgIExMX1RJTV9DbGVhckZsYWdfVEVSUgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNTc1MCw3ICs1NzUwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB3aGV0aGVyIHRyYW5zaXRpb24gZXJyb3IgaW50ZXJydXB0IGZsYWcgKFRFUlJGKSBpcyBzZXQgKHRyYW5zaXRpb24gZXJyb3IgaW50ZXJydXB0IGlzIHBlbmRpbmcpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0VOQ09ERVJfRVJST1JfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fRU5DT0RFUl9FUlJPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgZW5jb2RlciBlcnJvciBtYW5hZ2VtZW50LgogICAqIEBybXRvbGwgU1IgICAgICAgICAgIFRFUlJGICAgICAgICAgICBMTF9USU1fSXNBY3RpdmVGbGFnX1RFUlIKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTU3NjMsNyArNTc2Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgdGhlIGluZGV4IGVycm9yIGludGVycnVwdCBmbGFnIChJRVJSRikuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fRU5DT0RFUl9FUlJPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9FTkNPREVSX0VSUk9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBlbmNvZGVyIGVycm9yIG1hbmFnZW1lbnQuCiAgICogQHJtdG9sbCBTUiAgICAgICAgICAgSUVSUkYgICAgICAgICAgIExMX1RJTV9DbGVhckZsYWdfSUVSUgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNTc3Niw3ICs1Nzc2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB3aGV0aGVyIGluZGV4IGVycm9yIGludGVycnVwdCBmbGFnIChJRVJSRikgaXMgc2V0IChpbmRleCBlcnJvciBpbnRlcnJ1cHQgaXMgcGVuZGluZykuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fRU5DT0RFUl9FUlJPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9FTkNPREVSX0VSUk9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBlbmNvZGVyIGVycm9yIG1hbmFnZW1lbnQuCiAgICogQHJtdG9sbCBTUiAgICAgICAgICAgSUVSUkYgICAgICAgICAgIExMX1RJTV9Jc0FjdGl2ZUZsYWdfSUVSUgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNjExMSw3ICs2MTExLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdHJhbnNpdGlvbiBlcnJvciBpbnRlcnJ1cHQgKFRFUlJJRSkuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fRU5DT0RFUl9FUlJPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlIE1hY3JvIElTX1RJTV9FTkNPREVSX0VSUk9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgYSB0aW1lciBpbnN0YW5jZSBwcm92aWRlcyBlbmNvZGVyIGVycm9yIG1hbmFnZW1lbnQuCiAgICogQHJtdG9sbCBESUVSICAgICAgICAgVEVSUklFICAgICAgICAgICBMTF9USU1fRW5hYmxlSVRfVEVSUgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQpAQCAtNjEyNCw3ICs2MTI0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIHRyYW5zaXRpb24gZXJyb3IgaW50ZXJydXB0IChURVJSSUUpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0VOQ09ERVJfRVJST1JfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fRU5DT0RFUl9FUlJPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgZW5jb2RlciBlcnJvciBtYW5hZ2VtZW50LgogICAqIEBybXRvbGwgRElFUiAgICAgICAgIFRFUlJJRSAgICAgICAgICAgTExfVElNX0Rpc2FibGVJVF9URVJSCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC02MTM3LDcgKzYxMzcsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0cmFuc2l0aW9uIGVycm9yIGludGVycnVwdCAoVEVSUklFKSBpcyBlbmFibGVkLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0VOQ09ERVJfRVJST1JfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fRU5DT0RFUl9FUlJPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgZW5jb2RlciBlcnJvciBtYW5hZ2VtZW50LgogICAqIEBybXRvbGwgRElFUiAgICAgICAgIFRFUlJJRSAgICAgICAgICAgTExfVElNX0lzRW5hYmxlZElUX1RFUlIKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKQEAgLTYxNTAsNyArNjE1MCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIGluZGV4IGVycm9yIGludGVycnVwdCAoSUVSUklFKS4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9FTkNPREVSX0VSUk9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0VOQ09ERVJfRVJST1JfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGVuY29kZXIgZXJyb3IgbWFuYWdlbWVudC4KICAgKiBAcm10b2xsIERJRVIgICAgICAgICBJRVJSSUUgICAgICAgICAgIExMX1RJTV9FbmFibGVJVF9JRVJSCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC02MTYzLDcgKzYxNjMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgaW5kZXggZXJyb3IgaW50ZXJydXB0IChJRVJSSUUpLgotICAqIEBub3RlIE1hY3JvIEByZWYgSVNfVElNX0VOQ09ERVJfRVJST1JfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fRU5DT0RFUl9FUlJPUl9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgIGEgdGltZXIgaW5zdGFuY2UgcHJvdmlkZXMgZW5jb2RlciBlcnJvciBtYW5hZ2VtZW50LgogICAqIEBybXRvbGwgRElFUiAgICAgICAgIElFUlJJRSAgICAgICAgICAgTExfVElNX0Rpc2FibGVJVF9JRVJSCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCkBAIC02MTc2LDcgKzYxNzYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbmRleCBlcnJvciBpbnRlcnJ1cHQgKElFUlJJRSkgaXMgZW5hYmxlZC4KLSAgKiBAbm90ZSBNYWNybyBAcmVmIElTX1RJTV9FTkNPREVSX0VSUk9SX0lOU1RBTkNFKFRJTXgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgTWFjcm8gSVNfVElNX0VOQ09ERVJfRVJST1JfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGVuY29kZXIgZXJyb3IgbWFuYWdlbWVudC4KICAgKiBAcm10b2xsIERJRVIgICAgICAgICBJRVJSSUUgICAgICAgICAgIExMX1RJTV9Jc0VuYWJsZWRJVF9JRVJSCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX3VjcGQuaCBiL0luYy9zdG0zMmc0eHhfbGxfdWNwZC5oCmluZGV4IDdjNWVlY2MuLmRmZWRkYzIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfdWNwZC5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfdWNwZC5oCkBAIC01MywyNCArNTMsMjQgQEAKICAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0gIHVpbnQzMl90IHBzY191Y3BkY2xrOyAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBwcmVzY2FsZXIgZm9yIHRoZSB1Y3BkIGNsb2NrLgorICB1aW50MzJfdCBwc2NfdWNwZGNsazsgICAgICAgICAvKiE8IFNwZWNpZnkgdGhlIHByZXNjYWxlciBmb3IgdGhlIFVDUEQgY2xvY2suCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBVQ1BEX0xMX0VDX1BTQy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX1VDUERfU2V0UFNDQ2xrKCkuKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX1VDUERfU2V0UFNDQ2xrKCkuICAgICAgICAgKi8KIAotICB1aW50MzJfdCB0cmFuc3dpbjsgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGN5Y2xlcyAobWludXMgMSkgb2YgdGhlIGhhbGYgYml0IGNsb2NrIChzZWUgSEJJVENMS0RJVikgdG8gYWNoaWV2ZSBhIGxlZ2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0VHJhbnNpdGlvbldpbmRvdyAoc2V0IGFjY29yZGluZyB0byBwZXJpcGhlcmFsIGNsb2NrIHRvIGRlZmluZSBhbiBpbnRlcnZhbCBvZiBiZXR3ZWVuIDEyIGFuZCAyMCB1cykuCisgIHVpbnQzMl90IHRyYW5zd2luOyAgICAgICAgICAgIC8qITwgU3BlY2lmeSB0aGUgbnVtYmVyIG9mIGN5Y2xlcyAobWludXMgMSkgb2YgdGhlIGhhbGYgYml0IGNsb2NrIChzZWUgSEJJVENMS0RJVikgdG8gYWNoaWV2ZSBhIGxlZ2FsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0VHJhbnNpdGlvbldpbmRvdyAoc2V0IGFjY29yZGluZyB0byBwZXJpcGhlcmFsIGNsb2NrIHRvIGRlZmluZSBhbiBpbnRlcnZhbCBvZiBiZXR3ZWVuIDEyIGFuZCAyMCB1cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgxIGFuZCBNYXhfRGF0YT0weDFGCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9VQ1BEX1NldFRyYW5zV2luKCkuKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFsdWUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX1VDUERfU2V0VHJhbnNXaW4oKS4gICAgICAgICAgKi8KIAotICB1aW50MzJfdCBJZnJHYXA7ICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgY2xvY2sgZGl2aWRlciAobWludXMgMSkgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdEludGVyZnJhbWVHYXAKKyAgdWludDMyX3QgSWZyR2FwOyAgICAgICAgICAgICAgLyohPCBTcGVjaWZ5IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjbG9jayBkaXZpZGVyIChtaW51cyAxKSBpbiBvcmRlciB0byBnZW5lcmF0ZSB0SW50ZXJmcmFtZUdhcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgcGVyaXBoZXJhbCBjbG9jay4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgxIGFuZCBNYXhfRGF0YT0weDFGCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX1VDUERfU2V0SWZyR2FwKCkuKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfVUNQRF9TZXRJZnJHYXAoKS4gICAgICAgICAgKi8KIAotICB1aW50MzJfdCBIYml0Q2xvY2tEaXY7ICAgICAgICAvKiE8IFNwZWNpZmllcyAgdGhlIG51bWJlciBvZiBjeWNsZXMgKG1pbnVzIG9uZSkgYXQgVUNQRCBwZXJpcGhlcmFsIGZvciBhIGhhbGYgYml0IGNsb2NrIGUuZy4gcHJvZ3JhbSAzCisgIHVpbnQzMl90IEhiaXRDbG9ja0RpdjsgICAgICAgIC8qITwgU3BlY2lmeSB0aGUgbnVtYmVyIG9mIGN5Y2xlcyAobWludXMgb25lKSBhdCBVQ1BEIHBlcmlwaGVyYWwgZm9yIGEgaGFsZiBiaXQgY2xvY2sgZS5nLiBwcm9ncmFtIDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBiaXQgY2xvY2sgdGhhdCB0YWtlcyA4IGN5Y2xlcyBvZiB0aGUgcGVyaXBoZXJhbCBjbG9jayAiVUNQRDFfQ0xLIi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAgYW5kIE1heF9EYXRhPTB4M0YuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9VQ1BEX1NldEhiaXRDbG9ja0RpdigpLiovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9VQ1BEX1NldEhiaXRDbG9ja0RpdigpLiAgICovCiAKIH0gTExfVUNQRF9Jbml0VHlwZURlZjsKIApAQCAtODgsMjQgKzg4LDI0IEBACiAgICogQGJyaWVmICAgIEZsYWdzIGRlZmluZXMgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBMTF91Y3BkX1JlYWRSZWcgZnVuY3Rpb24KICAgKiBAewogICAqLwotI2RlZmluZSBMTF9VQ1BEX1NSX1RYSVMgICAgICAgICAgICAgVUNQRF9TUl9UWElTICAgICAgICAgICAgICAgLyohPCBUcmFuc21pdCBpbnRlcnJ1cHQgc3RhdHVzICAgICAgICAgICAgKi8KLSNkZWZpbmUgTExfVUNQRF9TUl9UWE1TR0RJU0MgICAgICAgIFVDUERfU1JfVFhNU0dESVNDICAgICAgICAgIC8qITwgVHJhbnNtaXQgbWVzc2FnZSBkaXNjYXJkZWQgaW50ZXJydXB0ICovCi0jZGVmaW5lIExMX1VDUERfU1JfVFhNU0dTRU5UICAgICAgICBVQ1BEX1NSX1RYTVNHU0VOVCAgICAgICAgICAvKiE8IFRyYW5zbWl0IG1lc3NhZ2Ugc2VudCBpbnRlcnJ1cHQgICAgICAqLwotI2RlZmluZSBMTF9VQ1BEX1NSX1RYTVNHQUJUICAgICAgICAgVUNQRF9TUl9UWE1TR0FCVCAgICAgICAgICAgLyohPCBUcmFuc21pdCBtZXNzYWdlIGFib3J0IGludGVycnVwdCAgICAgKi8KLSNkZWZpbmUgTExfVUNQRF9TUl9IUlNURElTQyAgICAgICAgIFVDUERfU1JfSFJTVERJU0MgICAgICAgICAgIC8qITwgSFJTVCBkaXNjYXJkZWQgaW50ZXJydXB0ICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VDUERfU1JfSFJTVFNFTlQgICAgICAgICBVQ1BEX1NSX0hSU1RTRU5UICAgICAgICAgICAvKiE8IEhSU1Qgc2VudCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBMTF9VQ1BEX1NSX1RYVU5EICAgICAgICAgICAgVUNQRF9TUl9UWFVORCAgICAgICAgICAgICAgLyohPCBUeCBkYXRhIHVuZGVycnVuIGNvbmRpdGlvbiBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTExfVUNQRF9TUl9SWE5FICAgICAgICAgICAgIFVDUERfU1JfUlhORSAgICAgICAgICAgICAgIC8qITwgUmVjZWl2ZSBkYXRhIHJlZ2lzdGVyIG5vdCBlbXB0eSBpbnRlcnJ1cHQgICovCi0jZGVmaW5lIExMX1VDUERfU1JfUlhPUkRERVQgICAgICAgICBVQ1BEX1NSX1JYT1JEREVUICAgICAgICAgICAvKiE8IFJ4IG9yZGVyZWQgc2V0ICg0IEstY29kZXMpIGRldGVjdGVkIGludGVycnVwdCAgKi8KLSNkZWZpbmUgTExfVUNQRF9TUl9SWEhSU1RERVQgICAgICAgIFVDUERfU1JfUlhIUlNUREVUICAgICAgICAgIC8qITwgUnggSGFyZCBSZXNldCBkZXRlY3QgaW50ZXJydXB0ICAqLwotI2RlZmluZSBMTF9VQ1BEX1NSX1JYT1ZSICAgICAgICAgICAgVUNQRF9TUl9SWE9WUiAgICAgICAgICAgICAgLyohPCBSeCBkYXRhIG92ZXJmbG93IGludGVycnVwdCAgKi8KLSNkZWZpbmUgTExfVUNQRF9TUl9SWE1TR0VORCAgICAgICAgIFVDUERfU1JfUlhNU0dFTkQgICAgICAgICAgIC8qITwgUnggbWVzc2FnZSByZWNlaXZlZCAgKi8KLSNkZWZpbmUgTExfVUNQRF9TUl9SWEVSUiAgICAgICAgICAgIFVDUERfU1JfUlhFUlIgICAgICAgICAgICAgIC8qITwgUnggZXJyb3IgICovCi0jZGVmaW5lIExMX1VDUERfU1JfVFlQRUNFVlQxICAgICAgICBVQ1BEX1NSX1RZUEVDRVZUMSAgICAgICAgICAvKiE8IFR5cGUgQyB2b2x0YWdlIGxldmVsIGV2ZW50IG9uIENDMSAgKi8KLSNkZWZpbmUgTExfVUNQRF9TUl9UWVBFQ0VWVDIgICAgICAgIFVDUERfU1JfVFlQRUNFVlQyICAgICAgICAgIC8qITwgVHlwZSBDIHZvbHRhZ2UgbGV2ZWwgZXZlbnQgb24gQ0MyICAqLwotI2RlZmluZSBMTF9VQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzEgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MxICAgLyohPFN0YXR1cyBvZiBEQyBsZXZlbCBvbiBDQzEgcGluICAqLwotI2RlZmluZSBMTF9VQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzIgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MyICAgLyohPFN0YXR1cyBvZiBEQyBsZXZlbCBvbiBDQzIgcGluICAqLwotI2RlZmluZSBMTF9VQ1BEX1NSX0ZSU0VWVCAgICAgICAgICAgVUNQRF9TUl9GUlNFVlQgICAgICAgICAgICAgLyohPEZhc3QgUm9sZSBTd2FwIGRldGVjdGlvbiBldmVudCAgKi8KKyNkZWZpbmUgTExfVUNQRF9TUl9UWElTICAgICAgICAgICAgIFVDUERfU1JfVFhJUyAgICAgICAgICAgICAgICAgIC8qITwgVHJhbnNtaXQgaW50ZXJydXB0IHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NSX1RYTVNHRElTQyAgICAgICAgVUNQRF9TUl9UWE1TR0RJU0MgICAgICAgICAgICAgLyohPCBUcmFuc21pdCBtZXNzYWdlIGRpc2NhcmRlZCBpbnRlcnJ1cHQgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfU1JfVFhNU0dTRU5UICAgICAgICBVQ1BEX1NSX1RYTVNHU0VOVCAgICAgICAgICAgICAvKiE8IFRyYW5zbWl0IG1lc3NhZ2Ugc2VudCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9TUl9UWE1TR0FCVCAgICAgICAgIFVDUERfU1JfVFhNU0dBQlQgICAgICAgICAgICAgIC8qITwgVHJhbnNtaXQgbWVzc2FnZSBhYm9ydCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NSX0hSU1RESVNDICAgICAgICAgVUNQRF9TUl9IUlNURElTQyAgICAgICAgICAgICAgLyohPCBIUlNUIGRpc2NhcmRlZCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfU1JfSFJTVFNFTlQgICAgICAgICBVQ1BEX1NSX0hSU1RTRU5UICAgICAgICAgICAgICAvKiE8IEhSU1Qgc2VudCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9TUl9UWFVORCAgICAgICAgICAgIFVDUERfU1JfVFhVTkQgICAgICAgICAgICAgICAgIC8qITwgVHggZGF0YSB1bmRlcnJ1biBjb25kaXRpb24gaW50ZXJydXB0ICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NSX1JYTkUgICAgICAgICAgICAgVUNQRF9TUl9SWE5FICAgICAgICAgICAgICAgICAgLyohPCBSZWNlaXZlIGRhdGEgcmVnaXN0ZXIgbm90IGVtcHR5IGludGVycnVwdCAgICAgICovCisjZGVmaW5lIExMX1VDUERfU1JfUlhPUkRERVQgICAgICAgICBVQ1BEX1NSX1JYT1JEREVUICAgICAgICAgICAgICAvKiE8IFJ4IG9yZGVyZWQgc2V0ICg0IEstY29kZXMpIGRldGVjdGVkIGludGVycnVwdCAgKi8KKyNkZWZpbmUgTExfVUNQRF9TUl9SWEhSU1RERVQgICAgICAgIFVDUERfU1JfUlhIUlNUREVUICAgICAgICAgICAgIC8qITwgUnggSGFyZCBSZXNldCBkZXRlY3QgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NSX1JYT1ZSICAgICAgICAgICAgVUNQRF9TUl9SWE9WUiAgICAgICAgICAgICAgICAgLyohPCBSeCBkYXRhIG92ZXJmbG93IGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfU1JfUlhNU0dFTkQgICAgICAgICBVQ1BEX1NSX1JYTVNHRU5EICAgICAgICAgICAgICAvKiE8IFJ4IG1lc3NhZ2UgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9TUl9SWEVSUiAgICAgICAgICAgIFVDUERfU1JfUlhFUlIgICAgICAgICAgICAgICAgIC8qITwgUnggZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NSX1RZUEVDRVZUMSAgICAgICAgVUNQRF9TUl9UWVBFQ0VWVDEgICAgICAgICAgICAgLyohPCBUeXBlIEMgdm9sdGFnZSBsZXZlbCBldmVudCBvbiBDQzEgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfU1JfVFlQRUNFVlQyICAgICAgICBVQ1BEX1NSX1RZUEVDRVZUMiAgICAgICAgICAgICAvKiE8IFR5cGUgQyB2b2x0YWdlIGxldmVsIGV2ZW50IG9uIENDMiAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MxIFVDUERfU1JfVFlQRUNfVlNUQVRFX0NDMSAgICAgIC8qITxTdGF0dXMgb2YgREMgbGV2ZWwgb24gQ0MxIHBpbiAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzIgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MyICAgICAgLyohPFN0YXR1cyBvZiBEQyBsZXZlbCBvbiBDQzIgcGluICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfU1JfRlJTRVZUICAgICAgICAgICBVQ1BEX1NSX0ZSU0VWVCAgICAgICAgICAgICAgICAvKiE8RmFzdCBSb2xlIFN3YXAgZGV0ZWN0aW9uIGV2ZW50ICAgICAgICAgICAgICAgICAgKi8KIAogLyoqCiAgICogQH0KQEAgLTExNSw0NCArMTE1LDQ0IEBACiAgICogQGJyaWVmICAgIElUIGRlZmluZXMgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBMTF9VQ1BEX1JlYWRSZWcgYW5kICBMTF9VQ1BEX1dyaXRlUmVnIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX1VDUERfSU1SX1RYSVMgICAgICAgICAgICAgVUNQRF9JTVJfVFhJU0lFICAgICAgICAgICAgICAgLyohPCBFbmFibGUgdHJhbnNtaXQgaW50ZXJydXB0IHN0YXR1cyAgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VDUERfSU1SX1RYTVNHRElTQyAgICAgICAgVUNQRF9JTVJfVFhNU0dESVNDSUUgICAgICAgICAgLyohPCBFbmFibGUgdHJhbnNtaXQgbWVzc2FnZSBkaXNjYXJkZWQgaW50ZXJydXB0ICovCi0jZGVmaW5lIExMX1VDUERfSU1SX1RYTVNHU0VOVCAgICAgICAgVUNQRF9JTVJfVFhNU0dTRU5USUUgICAgICAgICAgLyohPCBFbmFibGUgdHJhbnNtaXQgbWVzc2FnZSBzZW50IGludGVycnVwdCAgICAgICovCi0jZGVmaW5lIExMX1VDUERfSU1SX1RYTVNHQUJUICAgICAgICAgVUNQRF9JTVJfVFhNU0dBQlRJRSAgICAgICAgICAgLyohPCBFbmFibGUgdHJhbnNtaXQgbWVzc2FnZSBhYm9ydCBpbnRlcnJ1cHQgICAgICovCi0jZGVmaW5lIExMX1VDUERfSU1SX0hSU1RESVNDICAgICAgICAgVUNQRF9JTVJfSFJTVERJU0NJRSAgICAgICAgICAgLyohPCBFbmFibGUgSFJTVCBkaXNjYXJkZWQgaW50ZXJydXB0ICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VDUERfSU1SX0hSU1RTRU5UICAgICAgICAgVUNQRF9JTVJfSFJTVFNFTlRJRSAgICAgICAgICAgLyohPCBFbmFibGUgSFJTVCBzZW50IGludGVycnVwdCAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIExMX1VDUERfSU1SX1RYVU5EICAgICAgICAgICAgVUNQRF9JTVJfVFhVTkRJRSAgICAgICAgICAgICAgLyohPCBFbmFibGUgdHggZGF0YSB1bmRlcnJ1biBjb25kaXRpb24gaW50ZXJydXB0ICovCi0jZGVmaW5lIExMX1VDUERfSU1SX1JYTkUgICAgICAgICAgICAgVUNQRF9JTVJfUlhORUlFICAgICAgICAgICAgICAgLyohPCBFbmFibGUgUmVjZWl2ZSBkYXRhIHJlZ2lzdGVyIG5vdCBlbXB0eSBpbnRlcnJ1cHQgICovCi0jZGVmaW5lIExMX1VDUERfSU1SX1JYT1JEREVUICAgICAgICAgVUNQRF9JTVJfUlhPUkRERVRJRSAgICAgICAgICAgLyohPCBFbmFibGUgUnggb3JkZXJlZCBzZXQgKDQgSy1jb2RlcykgZGV0ZWN0ZWQgaW50ZXJydXB0ICAqLwotI2RlZmluZSBMTF9VQ1BEX0lNUl9SWEhSU1RERVQgICAgICAgIFVDUERfSU1SX1JYSFJTVERFVElFICAgICAgICAgIC8qITwgRW5hYmxlIFJ4IEhhcmQgUmVzZXQgZGV0ZWN0IGludGVycnVwdCAgKi8KLSNkZWZpbmUgTExfVUNQRF9JTVJfUlhPVlIgICAgICAgICAgICBVQ1BEX0lNUl9SWE9WUklFICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBSeCBkYXRhIG92ZXJmbG93IGludGVycnVwdCAgKi8KLSNkZWZpbmUgTExfVUNQRF9JTVJfUlhNU0dFTkQgICAgICAgICBVQ1BEX0lNUl9SWE1TR0VORCAgICAgICAgICAgICAvKiE8IEVuYWJsZSBSeCBtZXNzYWdlIHJlY2VpdmVkICAqLwotI2RlZmluZSBMTF9VQ1BEX0lNUl9SWEVSUiAgICAgICAgICAgIFVDUERfSU1SX1JYTVNHRU5ESUUgICAgICAgICAgIC8qITwgRW5hYmxlIFJ4IGVycm9yICAqLwotI2RlZmluZSBMTF9VQ1BEX0lNUl9UWVBFQ0VWVDEgICAgICAgIFVDUERfSU1SX1RZUEVDRVZUMUlFICAgICAgICAgIC8qITwgRW5hYmxlIFR5cGUgQyB2b2x0YWdlIGxldmVsIGV2ZW50IG9uIENDMSAgKi8KLSNkZWZpbmUgTExfVUNQRF9JTVJfVFlQRUNFVlQyICAgICAgICBVQ1BEX0lNUl9UWVBFQ0VWVDJJRSAgICAgICAgICAvKiE8IEVuYWJsZSBUeXBlIEMgdm9sdGFnZSBsZXZlbCBldmVudCBvbiBDQzIgICovCi0jZGVmaW5lIExMX1VDUERfSU1SX0ZSU0VWVCAgICAgICAgICAgVUNQRF9JTVJfRlJTRVZUSUUgICAgICAgICAgICAgLyohPCBFbmFibGUgZmFzdCBSb2xlIFN3YXAgZGV0ZWN0aW9uIGV2ZW50ICAqLworI2RlZmluZSBMTF9VQ1BEX0lNUl9UWElTICAgICAgICAgICAgIFVDUERfSU1SX1RYSVNJRSAgICAgICAgICAgICAgLyohPCBFbmFibGUgdHJhbnNtaXQgaW50ZXJydXB0IHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfSU1SX1RYTVNHRElTQyAgICAgICAgVUNQRF9JTVJfVFhNU0dESVNDSUUgICAgICAgICAvKiE8IEVuYWJsZSB0cmFuc21pdCBtZXNzYWdlIGRpc2NhcmRlZCBpbnRlcnJ1cHQgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9JTVJfVFhNU0dTRU5UICAgICAgICBVQ1BEX0lNUl9UWE1TR1NFTlRJRSAgICAgICAgIC8qITwgRW5hYmxlIHRyYW5zbWl0IG1lc3NhZ2Ugc2VudCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX0lNUl9UWE1TR0FCVCAgICAgICAgIFVDUERfSU1SX1RYTVNHQUJUSUUgICAgICAgICAgLyohPCBFbmFibGUgdHJhbnNtaXQgbWVzc2FnZSBhYm9ydCBpbnRlcnJ1cHQgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfSU1SX0hSU1RESVNDICAgICAgICAgVUNQRF9JTVJfSFJTVERJU0NJRSAgICAgICAgICAvKiE8IEVuYWJsZSBIUlNUIGRpc2NhcmRlZCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9JTVJfSFJTVFNFTlQgICAgICAgICBVQ1BEX0lNUl9IUlNUU0VOVElFICAgICAgICAgIC8qITwgRW5hYmxlIEhSU1Qgc2VudCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX0lNUl9UWFVORCAgICAgICAgICAgIFVDUERfSU1SX1RYVU5ESUUgICAgICAgICAgICAgLyohPCBFbmFibGUgdHggZGF0YSB1bmRlcnJ1biBjb25kaXRpb24gaW50ZXJydXB0ICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfSU1SX1JYTkUgICAgICAgICAgICAgVUNQRF9JTVJfUlhORUlFICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBSZWNlaXZlIGRhdGEgcmVnaXN0ZXIgbm90IGVtcHR5IGludGVycnVwdCAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9JTVJfUlhPUkRERVQgICAgICAgICBVQ1BEX0lNUl9SWE9SRERFVElFICAgICAgICAgIC8qITwgRW5hYmxlIFJ4IG9yZGVyZWQgc2V0ICg0IEstY29kZXMpIGRldGVjdGVkIGludGVycnVwdCAqLworI2RlZmluZSBMTF9VQ1BEX0lNUl9SWEhSU1RERVQgICAgICAgIFVDUERfSU1SX1JYSFJTVERFVElFICAgICAgICAgLyohPCBFbmFibGUgUnggSGFyZCBSZXNldCBkZXRlY3QgaW50ZXJydXB0ICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfSU1SX1JYT1ZSICAgICAgICAgICAgVUNQRF9JTVJfUlhPVlJJRSAgICAgICAgICAgICAvKiE8IEVuYWJsZSBSeCBkYXRhIG92ZXJmbG93IGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9JTVJfUlhNU0dFTkQgICAgICAgICBVQ1BEX0lNUl9SWE1TR0VORCAgICAgICAgICAgIC8qITwgRW5hYmxlIFJ4IG1lc3NhZ2UgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX0lNUl9SWEVSUiAgICAgICAgICAgIFVDUERfSU1SX1JYTVNHRU5ESUUgICAgICAgICAgLyohPCBFbmFibGUgUnggZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfSU1SX1RZUEVDRVZUMSAgICAgICAgVUNQRF9JTVJfVFlQRUNFVlQxSUUgICAgICAgICAvKiE8IEVuYWJsZSBUeXBlIEMgdm9sdGFnZSBsZXZlbCBldmVudCBvbiBDQzEgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9JTVJfVFlQRUNFVlQyICAgICAgICBVQ1BEX0lNUl9UWVBFQ0VWVDJJRSAgICAgICAgIC8qITwgRW5hYmxlIFR5cGUgQyB2b2x0YWdlIGxldmVsIGV2ZW50IG9uIENDMiAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX0lNUl9GUlNFVlQgICAgICAgICAgIFVDUERfSU1SX0ZSU0VWVElFICAgICAgICAgICAgLyohPCBFbmFibGUgZmFzdCBSb2xlIFN3YXAgZGV0ZWN0aW9uIGV2ZW50ICAgICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFVDUERfTExfRUNfT1JERVJTRVQgb3JkZXJzZXQgdmFsdWUKLSAgKiBAYnJpZWYgICAgZGVmaW5pdGlvbiBvZiB0aGUgdXN1YWwgb3JkZXJzZXQKKy8qKiBAZGVmZ3JvdXAgVUNQRF9MTF9FQ19PUkRFUlNFVCBPcmRlcmVkIHNldHMgdmFsdWUKKyAgKiBAYnJpZWYgICAgZGVmaW5pdGlvbiBvZiB0aGUgdXN1YWwgT3JkZXJlZCBzZXRzCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfVUNQRF9TWU5DMSAweDE4dQotI2RlZmluZSBMTF9VQ1BEX1NZTkMyIDB4MTF1Ci0jZGVmaW5lIExMX1VDUERfU1lOQzMgMHgwNnUKLSNkZWZpbmUgTExfVUNQRF9SU1QxICAweDA3dQotI2RlZmluZSBMTF9VQ1BEX1JTVDIgIDB4MTl1Ci0jZGVmaW5lIExMX1VDUERfRU9QICAgMHgwRHUKKyNkZWZpbmUgTExfVUNQRF9TWU5DMSAweDE4dSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSy1jb2RlIGZvciBTdGFydHN5bmNoICMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NZTkMyIDB4MTF1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBLLWNvZGUgZm9yIFN0YXJ0c3luY2ggIzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfU1lOQzMgMHgwNnUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEstY29kZSBmb3IgU3RhcnRzeW5jaCAjMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9SU1QxICAweDA3dSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSy1jb2RlIGZvciBIYXJkIFJlc2V0ICMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1JTVDIgIDB4MTl1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBLLWNvZGUgZm9yIEhhcmQgUmVzZXQgIzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfRU9QICAgMHgwRHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEstY29kZSBmb3IgRU9QIEVuZCBvZiBQYWNrZXQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotI2RlZmluZSBMTF9VQ1BEX09SREVSRURfU0VUX1NPUCAgICAgICAgIChMTF9VQ1BEX1NZTkMxIHwgKExMX1VDUERfU1lOQzE8PDV1KSB8IChMTF9VQ1BEX1NZTkMxPDwxMHUpIHwgKExMX1VDUERfU1lOQzI8PDE1dSkpCi0jZGVmaW5lIExMX1VDUERfT1JERVJFRF9TRVRfU09QMSAgICAgICAgKExMX1VDUERfU1lOQzEgfCAoTExfVUNQRF9TWU5DMTw8NXUpIHwgKExMX1VDUERfU1lOQzM8PDEwdSkgfCAoTExfVUNQRF9TWU5DMzw8MTV1KSkKLSNkZWZpbmUgTExfVUNQRF9PUkRFUkVEX1NFVF9TT1AyICAgICAgICAoTExfVUNQRF9TWU5DMSB8IChMTF9VQ1BEX1NZTkMzPDw1dSkgfCAoTExfVUNQRF9TWU5DMTw8MTB1KSB8IChMTF9VQ1BEX1NZTkMzPDwxNXUpKQotI2RlZmluZSBMTF9VQ1BEX09SREVSRURfU0VUX0hBUkRfUkVTRVQgIChMTF9VQ1BEX1JTVDEgIHwgKExMX1VDUERfUlNUMTw8NXUpICB8IChMTF9VQ1BEX1JTVDE8PDEwdSkgIHwgKExMX1VDUERfUlNUMjw8MTV1ICkpCi0jZGVmaW5lIExMX1VDUERfT1JERVJFRF9TRVRfQ0FCTEVfUkVTRVQgKExMX1VDUERfUlNUMSAgfCAoTExfVUNQRF9TWU5DMTw8NXUpIHwgKExMX1VDUERfUlNUMTw8MTB1KSAgfCAoTExfVUNQRF9TWU5DMzw8MTV1KSkKLSNkZWZpbmUgTExfVUNQRF9PUkRFUkVEX1NFVF9TT1AxX0RFQlVHICAoTExfVUNQRF9TWU5DMSB8IChMTF9VQ1BEX1JTVDI8PDV1KSAgfCAoTExfVUNQRF9SU1QyPDwxMHUpICB8IChMTF9VQ1BEX1NZTkMzPDwxNXUpKQotI2RlZmluZSBMTF9VQ1BEX09SREVSRURfU0VUX1NPUDJfREVCVUcgIChMTF9VQ1BEX1NZTkMxIHwgKExMX1VDUERfUlNUMjw8NXUpICB8IChMTF9VQ1BEX1NZTkMzPDwxMHUpIHwgKExMX1VDUERfU1lOQzI8PDE1dSkpCisjZGVmaW5lIExMX1VDUERfT1JERVJFRF9TRVRfU09QICAgICAgICAgKExMX1VDUERfU1lOQzEgfCAoTExfVUNQRF9TWU5DMTw8NXUpIHwgKExMX1VDUERfU1lOQzE8PDEwdSkgfCAoTExfVUNQRF9TWU5DMjw8MTV1KSkgLyohPCBTT1AgT3JkZXJlZCBzZXQgY29kaW5nICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9PUkRFUkVEX1NFVF9TT1AxICAgICAgICAoTExfVUNQRF9TWU5DMSB8IChMTF9VQ1BEX1NZTkMxPDw1dSkgfCAoTExfVUNQRF9TWU5DMzw8MTB1KSB8IChMTF9VQ1BEX1NZTkMzPDwxNXUpKSAvKiE8IFNPUCcgT3JkZXJlZCBzZXQgY29kaW5nICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX09SREVSRURfU0VUX1NPUDIgICAgICAgIChMTF9VQ1BEX1NZTkMxIHwgKExMX1VDUERfU1lOQzM8PDV1KSB8IChMTF9VQ1BEX1NZTkMxPDwxMHUpIHwgKExMX1VDUERfU1lOQzM8PDE1dSkpIC8qITwgU09QJycgT3JkZXJlZCBzZXQgY29kaW5nICAgICAgICovCisjZGVmaW5lIExMX1VDUERfT1JERVJFRF9TRVRfSEFSRF9SRVNFVCAgKExMX1VDUERfUlNUMSAgfCAoTExfVUNQRF9SU1QxPDw1dSkgIHwgKExMX1VDUERfUlNUMTw8MTB1KSAgfCAoTExfVUNQRF9SU1QyPDwxNXUgKSkgLyohPCBIYXJkIFJlc2V0IE9yZGVyZWQgc2V0IGNvZGluZyAgKi8KKyNkZWZpbmUgTExfVUNQRF9PUkRFUkVEX1NFVF9DQUJMRV9SRVNFVCAoTExfVUNQRF9SU1QxICB8IChMTF9VQ1BEX1NZTkMxPDw1dSkgfCAoTExfVUNQRF9SU1QxPDwxMHUpICB8IChMTF9VQ1BEX1NZTkMzPDwxNXUpKSAvKiE8IENhYmxlIFJlc2V0IE9yZGVyZWQgc2V0IGNvZGluZyAqLworI2RlZmluZSBMTF9VQ1BEX09SREVSRURfU0VUX1NPUDFfREVCVUcgIChMTF9VQ1BEX1NZTkMxIHwgKExMX1VDUERfUlNUMjw8NXUpICB8IChMTF9VQ1BEX1JTVDI8PDEwdSkgIHwgKExMX1VDUERfU1lOQzM8PDE1dSkpIC8qITwgU09QJyBEZWJ1ZyBPcmRlcmVkIHNldCBjb2RpbmcgICovCisjZGVmaW5lIExMX1VDUERfT1JERVJFRF9TRVRfU09QMl9ERUJVRyAgKExMX1VDUERfU1lOQzEgfCAoTExfVUNQRF9SU1QyPDw1dSkgIHwgKExMX1VDUERfU1lOQzM8PDEwdSkgfCAoTExfVUNQRF9TWU5DMjw8MTV1KSkgLyohPCBTT1AnJyBEZWJ1ZyBPcmRlcmVkIHNldCBjb2RpbmcgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNjAsNTkgKzE2MCw1OSBAQAogLyoqIEBkZWZncm91cCBVQ1BEX0xMX0VDX01PREUgUm9sZSBNb2RlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfVUNQRF9ST0xFX1NOSyAgICAgICAgICAgICBVQ1BEX0NSX0FOQU1PREUgICAgICAgIC8qITwgTW9kZSBTTksgUmQgICAgICAgICAqLwotI2RlZmluZSBMTF9VQ1BEX1JPTEVfU1JDICAgICAgICAgICAgIDB4MFUKKyNkZWZpbmUgTExfVUNQRF9ST0xFX1NOSyAgICAgICAgICAgICBVQ1BEX0NSX0FOQU1PREUgICAgICAgICAgICAgIC8qITwgTW9kZSBTTksgUmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1JPTEVfU1JDICAgICAgICAgICAgIDB4MFUgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNb2RlIFNSQyBScCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFVDUERfTExfRUNfUkVTSVNUT1IgcmVzaXN0b3IgdmFsdWUKKy8qKiBAZGVmZ3JvdXAgVUNQRF9MTF9FQ19SRVNJU1RPUiBSZXNpc3RvciB2YWx1ZQogICAqIEB7CiAgICovCi0jZGVmaW5lIExMX1VDUERfUkVTSVNUT1JfREVGQVVMVCAgICBVQ1BEX0NSX0FOQVNVQk1PREVfMCAgIC8qITwgUnAgZGVmYXVsdCAgKi8KLSNkZWZpbmUgTExfVUNQRF9SRVNJU1RPUl8xXzVBICAgICAgIFVDUERfQ1JfQU5BU1VCTU9ERV8xICAgLyohPCBScCAxLjUgQSAgICAqLwotI2RlZmluZSBMTF9VQ1BEX1JFU0lTVE9SXzNfMEEgICAgICAgVUNQRF9DUl9BTkFTVUJNT0RFICAgICAvKiE8IFJwIDMuMCBBICAgICovCi0jZGVmaW5lIExMX1VDUERfUkVTSVNUT1JfTk9ORSAgICAgICAweDBVICAgICAgICAgICAgICAgICAgICAvKiE8IE5vIHJlc2lzdG9yICovCisjZGVmaW5lIExMX1VDUERfUkVTSVNUT1JfREVGQVVMVCAgICBVQ1BEX0NSX0FOQVNVQk1PREVfMCAgICAgICAgICAvKiE8IFJwIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9SRVNJU1RPUl8xXzVBICAgICAgIFVDUERfQ1JfQU5BU1VCTU9ERV8xICAgICAgICAgIC8qITwgUnAgMS41IEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1JFU0lTVE9SXzNfMEEgICAgICAgVUNQRF9DUl9BTkFTVUJNT0RFICAgICAgICAgICAgLyohPCBScCAzLjAgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfUkVTSVNUT1JfTk9ORSAgICAgICAweDBVICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE5vIHJlc2lzdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgVUNQRF9MTF9FQ19DRkcxX09SREVSU0VUIG9yZGVyc2V0IGNvbmZpZ3VyYXRpb24KKy8qKiBAZGVmZ3JvdXAgVUNQRF9MTF9FQ19DRkcxX09SREVSU0VUIG9yZGVyZWQgc2V0IGNvbmZpZ3VyYXRpb24KICAgKiBAewogICAqLwotI2RlZmluZSBMTF9VQ1BEX09SREVSU0VUX1NPUCAgICAgICAgIFVDUERfQ0ZHMV9SWE9SRFNFVEVOXzAKLSNkZWZpbmUgTExfVUNQRF9PUkRFUlNFVF9TT1AxICAgICAgICBVQ1BEX0NGRzFfUlhPUkRTRVRFTl8xCi0jZGVmaW5lIExMX1VDUERfT1JERVJTRVRfU09QMiAgICAgICAgVUNQRF9DRkcxX1JYT1JEU0VURU5fMgotI2RlZmluZSBMTF9VQ1BEX09SREVSU0VUX0hBUkRSU1QgICAgIFVDUERfQ0ZHMV9SWE9SRFNFVEVOXzMKLSNkZWZpbmUgTExfVUNQRF9PUkRFUlNFVF9DQUJMRVJTVCAgICBVQ1BEX0NGRzFfUlhPUkRTRVRFTl80Ci0jZGVmaW5lIExMX1VDUERfT1JERVJTRVRfU09QMV9ERUJVRyAgVUNQRF9DRkcxX1JYT1JEU0VURU5fNQotI2RlZmluZSBMTF9VQ1BEX09SREVSU0VUX1NPUDJfREVCVUcgIFVDUERfQ0ZHMV9SWE9SRFNFVEVOXzYKLSNkZWZpbmUgTExfVUNQRF9PUkRFUlNFVF9TT1BfRVhUMSAgICBVQ1BEX0NGRzFfUlhPUkRTRVRFTl83Ci0jZGVmaW5lIExMX1VDUERfT1JERVJTRVRfU09QX0VYVDIgICAgVUNQRF9DRkcxX1JYT1JEU0VURU5fOAorI2RlZmluZSBMTF9VQ1BEX09SREVSU0VUX1NPUCAgICAgICAgIFVDUERfQ0ZHMV9SWE9SRFNFVEVOXzAgICAgICAgLyohPCBTT1AgT3JkZXJlZCBzZXQgZGV0ZWN0aW9uIGVuYWJsZWQgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfT1JERVJTRVRfU09QMSAgICAgICAgVUNQRF9DRkcxX1JYT1JEU0VURU5fMSAgICAgICAvKiE8IFNPUCcgT3JkZXJlZCBzZXQgZGV0ZWN0aW9uIGVuYWJsZWQgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9PUkRFUlNFVF9TT1AyICAgICAgICBVQ1BEX0NGRzFfUlhPUkRTRVRFTl8yICAgICAgIC8qITwgU09QJycgT3JkZXJlZCBzZXQgZGV0ZWN0aW9uIGVuYWJsZWQgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX09SREVSU0VUX0hBUkRSU1QgICAgIFVDUERfQ0ZHMV9SWE9SRFNFVEVOXzMgICAgICAgLyohPCBIYXJkIFJlc2V0IE9yZGVyZWQgc2V0IGRldGVjdGlvbiBlbmFibGVkICAgICAgICovCisjZGVmaW5lIExMX1VDUERfT1JERVJTRVRfQ0FCTEVSU1QgICAgVUNQRF9DRkcxX1JYT1JEU0VURU5fNCAgICAgICAvKiE8IENhYmxlIFJlc2V0IE9yZGVyZWQgc2V0IGRldGVjdGlvbiBlbmFibGVkICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9PUkRFUlNFVF9TT1AxX0RFQlVHICBVQ1BEX0NGRzFfUlhPUkRTRVRFTl81ICAgICAgIC8qITwgU09QJyBEZWJ1ZyBPcmRlcmVkIHNldCBkZXRlY3Rpb24gZW5hYmxlZCAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX09SREVSU0VUX1NPUDJfREVCVUcgIFVDUERfQ0ZHMV9SWE9SRFNFVEVOXzYgICAgICAgLyohPCBTT1AnJyBEZWJ1ZyBPcmRlcmVkIHNldCBkZXRlY3Rpb24gZW5hYmxlZCAgICAgICovCisjZGVmaW5lIExMX1VDUERfT1JERVJTRVRfU09QX0VYVDEgICAgVUNQRF9DRkcxX1JYT1JEU0VURU5fNyAgICAgICAvKiE8IFNPUCBleHRlbnNpb24jMSBPcmRlcmVkIHNldCBkZXRlY3Rpb24gZW5hYmxlZCAgKi8KKyNkZWZpbmUgTExfVUNQRF9PUkRFUlNFVF9TT1BfRVhUMiAgICBVQ1BEX0NGRzFfUlhPUkRTRVRFTl84ICAgICAgIC8qITwgU09QIGV4dGVuc2lvbiMyIE9yZGVyZWQgc2V0IGRldGVjdGlvbiBlbmFibGVkICAqLwogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBVQ1BEX0xMX0VDX0NDeEVWVCAgY2N4ZXZ0CisvKiogQGRlZmdyb3VwIFVDUERfTExfRUNfQ0N4RVZUICBDQ3ggZXZlbnQKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9VQ1BEX1NOS19DQzFfVk9QRU4gICAgICAweDAwdQotI2RlZmluZSBMTF9VQ1BEX1NOS19DQzFfVlJQICAgICAgICBVQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzFfMAotI2RlZmluZSBMTF9VQ1BEX1NOS19DQzFfVlJQMTVBICAgICBVQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzFfMQotI2RlZmluZSBMTF9VQ1BEX1NOS19DQzFfVlJQMzBBICAgICAoVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MxXzAgfCBVQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzFfMSkKKyNkZWZpbmUgTExfVUNQRF9TTktfQ0MxX1ZPUEVOICAgICAgMHgwMHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENDMSBTaW5rIE9wZW4gc3RhdGUgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfU05LX0NDMV9WUlAgICAgICAgIFVDUERfU1JfVFlQRUNfVlNUQVRFX0NDMV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQzEgU2luayB2UlAgZGVmYXVsdCBzdGF0ZSAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NOS19DQzFfVlJQMTVBICAgICBVQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzFfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0MxIFNpbmsgdlJQIDEuNUEgc3RhdGUgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9TTktfQ0MxX1ZSUDMwQSAgICAgKFVDUERfU1JfVFlQRUNfVlNUQVRFX0NDMV8wIHwgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MxXzEpICAvKiE8IENDMSBTaW5rIHZSUCAzLjBBIHN0YXRlICAgICAgICAgICovCiAKLSNkZWZpbmUgTExfVUNQRF9TTktfQ0MyX1ZPUEVOICAgICAgMHgwMHUKLSNkZWZpbmUgTExfVUNQRF9TTktfQ0MyX1ZSUCAgICAgICAgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MyXzAKLSNkZWZpbmUgTExfVUNQRF9TTktfQ0MyX1ZSUDE1QSAgICAgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MyXzEKLSNkZWZpbmUgTExfVUNQRF9TTktfQ0MyX1ZSUDMwQSAgICAgKFVDUERfU1JfVFlQRUNfVlNUQVRFX0NDMl8wIHwgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MyXzEpCisjZGVmaW5lIExMX1VDUERfU05LX0NDMl9WT1BFTiAgICAgIDB4MDB1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQzIgU2luayBPcGVuIHN0YXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NOS19DQzJfVlJQICAgICAgICBVQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzJfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0MyIFNpbmsgdlJQIGRlZmF1bHQgc3RhdGUgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9TTktfQ0MyX1ZSUDE1QSAgICAgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MyXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENDMiBTaW5rIHZSUCAxLjVBIHN0YXRlICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfU05LX0NDMl9WUlAzMEEgICAgIChVQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzJfMCB8IFVDUERfU1JfVFlQRUNfVlNUQVRFX0NDMl8xKSAgLyohPCBDQzIgU2luayB2UlAgMy4wQSBzdGF0ZSAgICAgICAgICAqLwogCi0jZGVmaW5lIExMX1VDUERfU1JDX0NDMV9WUkEgICAgICAgIDB4MFUKLSNkZWZpbmUgTExfVUNQRF9TUkNfQ0MxX1ZSRCAgICAgICAgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MxXzAKLSNkZWZpbmUgTExfVUNQRF9TUkNfQ0MxX09QRU4gICAgICAgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MxXzEKKyNkZWZpbmUgTExfVUNQRF9TUkNfQ0MxX1ZSQSAgICAgICAgMHgwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0MxIFNvdXJjZSB2UkEgc3RhdGUgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfU1JDX0NDMV9WUkQgICAgICAgIFVDUERfU1JfVFlQRUNfVlNUQVRFX0NDMV8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENDMSBTb3VyY2UgdlJEIHN0YXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NSQ19DQzFfT1BFTiAgICAgICBVQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzFfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQzEgU291cmNlIE9wZW4gc3RhdGUgICAgICAgICAgICAgKi8KIAotI2RlZmluZSBMTF9VQ1BEX1NSQ19DQzJfVlJBICAgICAgICAweDBVCi0jZGVmaW5lIExMX1VDUERfU1JDX0NDMl9WUkQgICAgICAgIFVDUERfU1JfVFlQRUNfVlNUQVRFX0NDMl8wCi0jZGVmaW5lIExMX1VDUERfU1JDX0NDMl9PUEVOICAgICAgIFVDUERfU1JfVFlQRUNfVlNUQVRFX0NDMl8xCisjZGVmaW5lIExMX1VDUERfU1JDX0NDMl9WUkEgICAgICAgIDB4MFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENDMiBTb3VyY2UgdlJBIHN0YXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1NSQ19DQzJfVlJEICAgICAgICBVQ1BEX1NSX1RZUEVDX1ZTVEFURV9DQzJfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDQzIgU291cmNlIHZSRCBzdGF0ZSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9TUkNfQ0MyX09QRU4gICAgICAgVUNQRF9TUl9UWVBFQ19WU1RBVEVfQ0MyXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ0MyIFNvdXJjZSBPcGVuIHN0YXRlICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMjIwLDY1ICsyMjAsNjUgQEAKIC8qKiBAZGVmZ3JvdXAgVUNQRF9MTF9FQ19QU0MgcHJlc2NhbGVyIGZvciBVQ1BEQ0xLCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfVUNQRF9QU0NfRElWMSAgICAgICAgICAgIDB4MHUKLSNkZWZpbmUgTExfVUNQRF9QU0NfRElWMiAgICAgICAgICAgIFVDUERfQ0ZHMV9QU0NfVUNQRENMS18wCi0jZGVmaW5lIExMX1VDUERfUFNDX0RJVjQgICAgICAgICAgICBVQ1BEX0NGRzFfUFNDX1VDUERDTEtfMQotI2RlZmluZSBMTF9VQ1BEX1BTQ19ESVY4ICAgICAgICAgICAgKFVDUERfQ0ZHMV9QU0NfVUNQRENMS18xIHwgVUNQRF9DRkcxX1BTQ19VQ1BEQ0xLXzApCi0jZGVmaW5lIExMX1VDUERfUFNDX0RJVjE2ICAgICAgICAgICBVQ1BEX0NGRzFfUFNDX1VDUERDTEtfMgorI2RlZmluZSBMTF9VQ1BEX1BTQ19ESVYxICAgICAgICAgICAgMHgwdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBCeXBhc3MgcHJlLXNjYWxpbmcgLyBkaXZpZGUgYnkgMSAgKi8KKyNkZWZpbmUgTExfVUNQRF9QU0NfRElWMiAgICAgICAgICAgIFVDUERfQ0ZHMV9QU0NfVUNQRENMS18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUHJlLXNjYWxlIGNsb2NrIGJ5IGRpdmlkaW5nIGJ5IDIgICovCisjZGVmaW5lIExMX1VDUERfUFNDX0RJVjQgICAgICAgICAgICBVQ1BEX0NGRzFfUFNDX1VDUERDTEtfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFByZS1zY2FsZSBjbG9jayBieSBkaXZpZGluZyBieSA0ICAqLworI2RlZmluZSBMTF9VQ1BEX1BTQ19ESVY4ICAgICAgICAgICAgKFVDUERfQ0ZHMV9QU0NfVUNQRENMS18xIHwgVUNQRF9DRkcxX1BTQ19VQ1BEQ0xLXzApICAgICAgLyohPCBQcmUtc2NhbGUgY2xvY2sgYnkgZGl2aWRpbmcgYnkgOCAgKi8KKyNkZWZpbmUgTExfVUNQRF9QU0NfRElWMTYgICAgICAgICAgIFVDUERfQ0ZHMV9QU0NfVUNQRENMS18yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUHJlLXNjYWxlIGNsb2NrIGJ5IGRpdmlkaW5nIGJ5IDE2ICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFVDUERfTExfRUNfQ0NFTkFCTEUgY2MgcGluIGVuYWJsZQorLyoqIEBkZWZncm91cCBVQ1BEX0xMX0VDX0NDRU5BQkxFIENDIHBpbiBlbmFibGUKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9VQ1BEX0NDRU5BQkxFX05PTkUgICAgICAgMHgwVQotI2RlZmluZSBMTF9VQ1BEX0NDRU5BQkxFX0NDMSAgICAgICAgVUNQRF9DUl9DQ0VOQUJMRV8wCi0jZGVmaW5lIExMX1VDUERfQ0NFTkFCTEVfQ0MyICAgICAgICBVQ1BEX0NSX0NDRU5BQkxFXzEKLSNkZWZpbmUgTExfVUNQRF9DQ0VOQUJMRV9DQzFDQzIgICAgIChVQ1BEX0NSX0NDRU5BQkxFXzAgfCBVQ1BEX0NSX0NDRU5BQkxFXzEpCisjZGVmaW5lIExMX1VDUERfQ0NFTkFCTEVfTk9ORSAgICAgICAweDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE5laXRoZXIgUEhZIGlzIGFjdGl2YXRlZCAoZS5nLiBkaXNhYmxlZCBzdGF0ZSBvZiBzb3VyY2UpICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfQ0NFTkFCTEVfQ0MxICAgICAgICBVQ1BEX0NSX0NDRU5BQkxFXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnRyb2xzIGFwcGx5IHRvIG9ubHkgQ0MxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfQ0NFTkFCTEVfQ0MyICAgICAgICBVQ1BEX0NSX0NDRU5BQkxFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnRyb2xzIGFwcGx5IHRvIG9ubHkgQ0MxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfQ0NFTkFCTEVfQ0MxQ0MyICAgICAoVUNQRF9DUl9DQ0VOQUJMRV8wIHwgVUNQRF9DUl9DQ0VOQUJMRV8xKSAgICAgICAgICAgICAgICAvKiE8IENvbnRyb2xzIGFwcGx5IHRvIGJvdGggQ0MxIGFuZCBDQzIgKG5vcm1hbCB1c2FnZSBmb3Igc2luay9zb3VyY2UpICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFVDUERfTExfRUNfQ0NQSU4gY2MgcGluIHNlbGVjdGlvbgorLyoqIEBkZWZncm91cCBVQ1BEX0xMX0VDX0NDUElOIENDIHBpbiBzZWxlY3Rpb24KICAgKiBAewogICAqLwotI2RlZmluZSBMTF9VQ1BEX0NDUElOX0NDMSAgICAgICAgICAgMHgwVQotI2RlZmluZSBMTF9VQ1BEX0NDUElOX0NDMiAgICAgICAgICAgVUNQRF9DUl9QSFlDQ1NFTAorI2RlZmluZSBMTF9VQ1BEX0NDUElOX0NDMSAgICAgICAgICAgMHgwVSAgICAgICAgICAgICAgICAgICAgLyohPCBVc2UgQ0MxIElPIGZvciBwb3dlciBkZWxpdmVyeSBjb21tdW5pY2F0aW9uICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX0NDUElOX0NDMiAgICAgICAgICAgVUNQRF9DUl9QSFlDQ1NFTCAgICAgICAgLyohPCBVc2UgQ0MyIElPIGZvciBwb3dlciBkZWxpdmVyeSBjb21tdW5pY2F0aW9uICAgICAgICAgICAgICAqLwogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBVQ1BEX0xMX0VDX1JYTU9ERSByeCBtb2RlCisvKiogQGRlZmdyb3VwIFVDUERfTExfRUNfUlhNT0RFIFJlY2VpdmVyIG1vZGUKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9VQ1BEX1JYTU9ERV9OT1JNQUwgICAgICAgICAgIDB4MFUKLSNkZWZpbmUgTExfVUNQRF9SWE1PREVfQklTVF9URVNUX0RBVEEgICBVQ1BEX0NSX1JYTU9ERQorI2RlZmluZSBMTF9VQ1BEX1JYTU9ERV9OT1JNQUwgICAgICAgICAgIDB4MFUgICAgICAgICAgICAgICAgLyohPCBOb3JtYWwgcmVjZWl2ZSBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1JYTU9ERV9CSVNUX1RFU1RfREFUQSAgIFVDUERfQ1JfUlhNT0RFICAgICAgLyohPCBCSVNUIHJlY2VpdmUgbW9kZSAoQklTVCBUZXN0IERhdGEgTW9kZSkgICAgICAgICAgICAgICAgICAqLwogLyoqCiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBVQ1BEX0xMX0VDX1RYTU9ERSB0eCBtb2RlCisvKiogQGRlZmdyb3VwIFVDUERfTExfRUNfVFhNT0RFIFR5cGUgb2YgVHggcGFja2V0CiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfVUNQRF9UWE1PREVfTk9STUFMICAgICAgICAgICAweDBVCi0jZGVmaW5lIExMX1VDUERfVFhNT0RFX0NBQkxFX1JFU0VUICAgICAgVUNQRF9DUl9UWE1PREVfMAotI2RlZmluZSBMTF9VQ1BEX1RYTU9ERV9CSVNUX0NBUlJJRVIyICAgIFVDUERfQ1JfVFhNT0RFXzEKKyNkZWZpbmUgTExfVUNQRF9UWE1PREVfTk9STUFMICAgICAgICAgICAweDBVICAgICAgICAgICAgICAgIC8qITwgSW5pdGlhdGUgdGhlIHRyYW5zZmVyIG9mIGEgVHggbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9UWE1PREVfQ0FCTEVfUkVTRVQgICAgICBVQ1BEX0NSX1RYTU9ERV8wICAgIC8qITwgVHJpZ2dlciBhIHRoZSB0cmFuc2ZlciBvZiBhIENhYmxlIFJlc2V0IHNlcXVlbmNlICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9UWE1PREVfQklTVF9DQVJSSUVSMiAgICBVQ1BEX0NSX1RYTU9ERV8xICAgIC8qITwgVHJpZ2dlciBhIEJJU1QgdGVzdCBzZXF1ZW5jZSBzZW5kIChCSVNUIENhcnJpZXIgTW9kZSAyKSAgKi8KIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgVUNQRF9MTF9FQ19SWE9SRFNFVCByeCBvcmRlcnNldAorLyoqIEBkZWZncm91cCBVQ1BEX0xMX0VDX1JYT1JEU0VUIFJ4IG9yZGVyZWQgc2V0IGNvZGUgZGV0ZWN0ZWQKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9VQ1BEX1JYT1JEU0VUX1NPUCAgICAgICAgICAgICAweDBVCi0jZGVmaW5lIExMX1VDUERfUlhPUkRTRVRfU09QMSAgICAgICAgICAgIFVDUERfUlhfT1JEU0VUX1JYT1JEU0VUXzAKLSNkZWZpbmUgTExfVUNQRF9SWE9SRFNFVF9TT1AyICAgICAgICAgICAgVUNQRF9SWF9PUkRTRVRfUlhPUkRTRVRfMQotI2RlZmluZSBMTF9VQ1BEX1JYT1JEU0VUX1NPUDFfREVCVUcgICAgICAoVUNQRF9SWF9PUkRTRVRfUlhPUkRTRVRfMCB8IFVDUERfUlhfT1JEU0VUX1JYT1JEU0VUXzEpCi0jZGVmaW5lIExMX1VDUERfUlhPUkRTRVRfU09QMl9ERUJVRyAgICAgIFVDUERfUlhfT1JEU0VUX1JYT1JEU0VUXzIKLSNkZWZpbmUgTExfVUNQRF9SWE9SRFNFVF9DQUJMRV9SRVNFVCAgICAgKFVDUERfUlhfT1JEU0VUX1JYT1JEU0VUXzIgfCBVQ1BEX1JYX09SRFNFVF9SWE9SRFNFVF8wKQotI2RlZmluZSBMTF9VQ1BEX1JYT1JEU0VUX1NPUEVYVDEgICAgICAgICAoVUNQRF9SWF9PUkRTRVRfUlhPUkRTRVRfMiB8IFVDUERfUlhfT1JEU0VUX1JYT1JEU0VUXzEpCi0jZGVmaW5lIExMX1VDUERfUlhPUkRTRVRfU09QRVhUMiAgICAgICAgIChVQ1BEX1JYX09SRFNFVF9SWE9SRFNFVF8yIHwgVUNQRF9SWF9PUkRTRVRfUlhPUkRTRVRfMSB8IFVDUERfUlhfT1JEU0VUX1JYT1JEU0VUXzApCisjZGVmaW5lIExMX1VDUERfUlhPUkRTRVRfU09QICAgICAgICAgICAgIDB4MFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNPUCBjb2RlIGRldGVjdGVkIGluIHJlY2VpdmVyICAgICAgICAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1JYT1JEU0VUX1NPUDEgICAgICAgICAgICBVQ1BEX1JYX09SRFNFVF9SWE9SRFNFVF8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTT1AnIGNvZGUgZGV0ZWN0ZWQgaW4gcmVjZWl2ZXIgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9SWE9SRFNFVF9TT1AyICAgICAgICAgICAgVUNQRF9SWF9PUkRTRVRfUlhPUkRTRVRfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU09QJycgY29kZSBkZXRlY3RlZCBpbiByZWNlaXZlciAgICAgICAgICAgICovCisjZGVmaW5lIExMX1VDUERfUlhPUkRTRVRfU09QMV9ERUJVRyAgICAgIChVQ1BEX1JYX09SRFNFVF9SWE9SRFNFVF8wIHwgVUNQRF9SWF9PUkRTRVRfUlhPUkRTRVRfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNPUCcgRGVidWcgY29kZSBkZXRlY3RlZCBpbiByZWNlaXZlciAgICAgICAqLworI2RlZmluZSBMTF9VQ1BEX1JYT1JEU0VUX1NPUDJfREVCVUcgICAgICBVQ1BEX1JYX09SRFNFVF9SWE9SRFNFVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTT1AnJyBEZWJ1ZyBjb2RlIGRldGVjdGVkIGluIHJlY2VpdmVyICAgICAgKi8KKyNkZWZpbmUgTExfVUNQRF9SWE9SRFNFVF9DQUJMRV9SRVNFVCAgICAgKFVDUERfUlhfT1JEU0VUX1JYT1JEU0VUXzIgfCBVQ1BEX1JYX09SRFNFVF9SWE9SRFNFVF8wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2FibGUgUmVzZXQgY29kZSBkZXRlY3RlZCBpbiByZWNlaXZlciAgICAgICovCisjZGVmaW5lIExMX1VDUERfUlhPUkRTRVRfU09QRVhUMSAgICAgICAgIChVQ1BEX1JYX09SRFNFVF9SWE9SRFNFVF8yIHwgVUNQRF9SWF9PUkRTRVRfUlhPUkRTRVRfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNPUCBleHRlbnNpb24jMSBjb2RlIGRldGVjdGVkIGluIHJlY2VpdmVyICAqLworI2RlZmluZSBMTF9VQ1BEX1JYT1JEU0VUX1NPUEVYVDIgICAgICAgICAoVUNQRF9SWF9PUkRTRVRfUlhPUkRTRVRfMiB8IFVDUERfUlhfT1JEU0VUX1JYT1JEU0VUXzEgfCBVQ1BEX1JYX09SRFNFVF9SWE9SRFNFVF8wKSAgLyohPCBTT1AgZXh0ZW5zaW9uIzIgY29kZSBkZXRlY3RlZCBpbiByZWNlaXZlciAgKi8KIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX3VzYXJ0LmggYi9JbmMvc3RtMzJnNHh4X2xsX3VzYXJ0LmgKaW5kZXggNWFiY2I3NC4uNGYxYWY3MyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF91c2FydC5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfdXNhcnQuaApAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC02NCwxMyArNjQsNiBAQAogICAqLwogCiAvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBVU0FSVF9MTF9Qcml2YXRlX0NvbnN0YW50cyBVU0FSVCBQcml2YXRlIENvbnN0YW50cwotICAqIEB7Ci0gICovCi0vKioKLSAgKiBAfQotICAqLwotCiAvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmIGRlZmluZWQoVVNFX0ZVTExfTExfRFJJVkVSKQogLyoqIEBkZWZncm91cCBVU0FSVF9MTF9Qcml2YXRlX01hY3JvcyBVU0FSVCBQcml2YXRlIE1hY3JvcwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF91c2IuaCBiL0luYy9zdG0zMmc0eHhfbGxfdXNiLmgKaW5kZXggYmUwOGRkOC4uMjUzOWRhOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyZzR4eF9sbF91c2IuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX3VzYi5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTE1MSw2ICsxNTEsMTQgQEAKICAgKiBAfQogICAqLwogCisvKiogQGRlZmdyb3VwIFVTQl9MTCBEZXZpY2UgU3BlZWQKKyAgKiBAeworICAqLworI2RlZmluZSBVU0JEX0ZTX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAyVQorLyoqCisgICogQH0KKyAgKi8KKwogI2RlZmluZSBCVEFCTEVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMFUKICNkZWZpbmUgUE1BX0FDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVUKIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyZzR4eF9sbF91dGlscy5oIGIvSW5jL3N0bTMyZzR4eF9sbF91dGlscy5oCmluZGV4IDhiMjJhYjYuLmY4Y2QxYjkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfdXRpbHMuaAorKysgYi9JbmMvc3RtMzJnNHh4X2xsX3V0aWxzLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJnNHh4X2xsX3d3ZGcuaCBiL0luYy9zdG0zMmc0eHhfbGxfd3dkZy5oCmluZGV4IGI5N2QzOTMuLjExOTY2YjggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmc0eHhfbGxfd3dkZy5oCisrKyBiL0luYy9zdG0zMmc0eHhfbGxfd3dkZy5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTU4LDggKzU4LDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBXV0RHX0xMX0VDX1BSRVNDQUxFUiAgUFJFU0NBTEVSCi0qIEB7Ci0qLworICAqIEB7CisgICovCiAjZGVmaW5lIExMX1dXREdfUFJFU0NBTEVSXzEgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDB1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXREcgY291bnRlciBjbG9jayA9IChQQ0xLMS80MDk2KS8xICovCiAjZGVmaW5lIExMX1dXREdfUFJFU0NBTEVSXzIgICAgICAgICAgICAgICAgIFdXREdfQ0ZSX1dER1RCXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXREcgY291bnRlciBjbG9jayA9IChQQ0xLMS80MDk2KS8yICovCiAjZGVmaW5lIExMX1dXREdfUFJFU0NBTEVSXzQgICAgICAgICAgICAgICAgIFdXREdfQ0ZSX1dER1RCXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFdXREcgY291bnRlciBjbG9jayA9IChQQ0xLMS80MDk2KS80ICovCkBAIC0xODMsNyArMTgzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9XV0RHX1BSRVNDQUxFUl8zMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1dXREdfUFJFU0NBTEVSXzY0CiAgICogICAgICAgICBAYXJnIEByZWYgTExfV1dER19QUkVTQ0FMRVJfMTI4Ci0qIEByZXR2YWwgTm9uZQorICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfV1dER19TZXRQcmVzY2FsZXIoV1dER19UeXBlRGVmICpXV0RHeCwgdWludDMyX3QgUHJlc2NhbGVyKQogewpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IDY0NDIzZDguLmYyMTAwNmEgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTM1LDYgKzM1LDcgQEAKIEhBTCBEcml2ZXIgRzQgfCBDTVNJUyBEZXZpY2UgRzQgfCBDTVNJUyBDb3JlIHwgV2FzIGRlbGl2ZXJlZCBpbiB0aGUgZnVsbCBNQ1UgcGFja2FnZQogLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUYWcgdjEuMC4wIHwgVGFnIHYxLjAuMCB8IFRhZyB2NS40LjBfY200IHwgVGFnIHYxLjAuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgbmV3IHRhZykKK1RhZyB2MS4xLjAgfCBUYWcgdjEuMS4wIHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuMS4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBuZXcgdGFnKQogCiBUaGUgZnVsbCAqKlNUTTMyQ3ViZUc0KiogTUNVIHBhY2thZ2UgaXMgYXZhaWxhYmxlIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vU1RNaWNyb2VsZWN0cm9uaWNzL1NUTTMyQ3ViZUc0KS4KIApkaWZmIC0tZ2l0IGEvUmVsZWFzZV9Ob3Rlcy5odG1sIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCmluZGV4IDQwMmUzOTIuLmNhMTg0OTUgMTAwNjQ0Ci0tLSBhL1JlbGVhc2VfTm90ZXMuaHRtbAorKysgYi9SZWxlYXNlX05vdGVzLmh0bWwKQEAgLTExLDcgKzExLDcgQEAKICAgICAgIHNwYW4udW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KICAgICAgIGRpdi5jb2x1bW57ZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogNTAlO30KICAgPC9zdHlsZT4KLSAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9faHRtcmVzYy9taW5pLXN0LmNzcyIgLz4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJfaHRtcmVzYy9taW5pLXN0LmNzcyIgLz4KICAgPCEtLVtpZiBsdCBJRSA5XT4KICAgICA8c2NyaXB0IHNyYz0iLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaHRtbDVzaGl2LzMuNy4zL2h0bWw1c2hpdi1wcmludHNoaXYubWluLmpzIj48L3NjcmlwdD4KICAgPCFbZW5kaWZdLS0+CkBAIC00NiwxMSArNDYsOTIgQEAKIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiBjb2wtbGctOCI+CiA8aDEgaWQ9InVwZGF0ZS1oaXN0b3J5Ij5VcGRhdGUgSGlzdG9yeTwvaDE+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+Ci08aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uNCIgY2hlY2tlZCBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb240IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMC4wIC8gMTItQXByaWwtMjAxOTwvbGFiZWw+Cis8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMiIgY2hlY2tlZCBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMS4wIC8gMjgtSnVuZS0yMDE5PC9sYWJlbD4KIDxkaXY+CiA8aDIgaWQ9Im1haW4tY2hhbmdlcyI+TWFpbiBDaGFuZ2VzPC9oMj4KLTxoMyBpZD0iZmlyc3QtcmVsZWFzZSI+Rmlyc3QgcmVsZWFzZTwvaDM+Ci08cD5GaXJzdCBvZmZpY2lhbCByZWxlYXNlIG9mIEhBTCAoSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIpIGFuZCBMTCAoTG93IGxheWVycykgZHJpdmVycyB0byBzdXBwb3J0IFNUTTMyRzQzMS80MXh4LCBTVE0zMkc0NzF4eCwgU1RNMzJHNDczLzgzeHggYW5kIFNUTTMyRzQ3NC84NHh4LjwvcD4KKzxoMyBpZD0ibWFpbnRlbmFuY2UtcmVsZWFzZSI+TWFpbnRlbmFuY2UgUmVsZWFzZTwvaDM+Cis8cD5NYWludGVuYW5jZSByZWxlYXNlIG9mIEhBTCAoSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIpIGFuZCBMTCAoTG93IGxheWVycykgZHJpdmVycyB0byBzdXBwb3J0IFNUTTMyRzQzMS80MXh4LCBTVE0zMkc0NzF4eCwgU1RNMzJHNDczLzgzeHggYW5kIFNUTTMyRzQ3NC84NHh4LjwvcD4KKzxoMiBpZD0iY29udGVudHMiPkNvbnRlbnRzPC9oMj4KKzx0YWJsZT4KKzxjYXB0aW9uPkFkZGl0aW9uYWwgZmVhdHVyZXMgYW5kIGNoYW5nZXMgOjwvY2FwdGlvbj4KKzx0aGVhZD4KKzx0ciBjbGFzcz0iaGVhZGVyIj4KKzx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkhlYWRsaW5lPC90aD4KKzwvdHI+Cis8L3RoZWFkPgorPHRib2R5PgorPHRyIGNsYXNzPSJvZGQiPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+R2VuZXJhbDogU3VwcG9ydCBvZiBkZXZpY2UgU1RNMzJHNDgzeHggaW4gSEFMIGFuZCBMTCBkcml2ZXJzPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImV2ZW4iPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+Q09NUDogU3VwcHJlc3MgRGVnbGl0Y2hlciBtb2RlIC0gTm90IHN1cHBvcnRlZCBvbiBTVE0zMkc0IHNlcmllczwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJvZGQiPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+SEFMOiBDaGFuZ2UgbmFtaW5nIG9mIHRoZSBJUlFuIDIgdG8gUlRDX1RBTVBfTFNFQ1NTX0lSUW48L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iZXZlbiI+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5IUlRJTTogSFJUSU1fT1VUUFVUUkVTRVRfVElNQUVWeCByZW5hbWVkIHRvIEhSVElNX09VVFBVVFJFU0VUX1RJTUVWeDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJvZGQiPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+VElNOiBBZGQgbmV3IG1hY3JvIHRvIGNvbmZpZ3VyZSBmYXN0IG1vZGU8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iZXZlbiI+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5USU06IE1hc3RlciBTbGF2ZSBNb2RlIChNU00pIGlzIG5vdyBjb25maWd1cmFibGU8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPgorPHRhYmxlPgorPGNhcHRpb24+QnVncyBmaXggOjwvY2FwdGlvbj4KKzx0aGVhZD4KKzx0ciBjbGFzcz0iaGVhZGVyIj4KKzx0aCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkhlYWRsaW5lPC90aD4KKzwvdHI+Cis8L3RoZWFkPgorPHRib2R5PgorPHRyIGNsYXNzPSJvZGQiPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+R2VuZXJhbCA6IHJlZGVmaW5pdGlvbiBvZiByZWdpc3RlcnMgd2l0aCBhZGp1c3RlZCBhZGRyZXNzIE1VU1QgYmUgdm9sYXRpbGU8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iZXZlbiI+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5ETUEgOiBETUEyIGluc3RhbmNlIGNhbm5vdCBiZSBjb25maWd1cmVkIGluIExMIGRyaXZlcnM8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0ib2RkIj4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkdQSU86IEhBTF9HUElPX0RlSW5pdCgpIGJ1ZyBvbiBFWFRJIG1hbmFnZW1lbnQ8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iZXZlbiI+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5HUElPOiBDb21waWxhdGlvbiB3YXJuaW5nIHdpdGggSUFSIHY4LjMwPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9Im9kZCI+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5IQUw6IENvcnJlY3QgcG90ZW50aWFsIGlzc3VlIHdpdGhpbiBIQUxfU2V0VGlja0ZyZXEoKSBmdW5jdGlvbjwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJldmVuIj4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkhSVElNOiBIUlRJTV9USU14Q1IuREVMQ01QIGlzbuKAmXQgc3lzdGVtYXRpY2FsbHkgcHJvZ3JhbW1lZDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJvZGQiPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+SFJUSU06IEZhdWx0IHNvdXJjZSBwcm9ncmFtbWluZyBpc27igJl0IHdyb25nIGluIEhBTF9IUlRJTV9GYXVsdENvbmZpZzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJldmVuIj4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkhSVElNIDogVXNlbGVzcyBBc3NpZ25tZW50IGF0IGZ1bmN0aW9uIEhBTF9IUlRJTV9TaW1wbGVPQ0NoYW5uZWxDb25maWc8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0ib2RkIj4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPlJDQzogU2hvdWxkIG5vdCBvdmVyd3JpdGUgVGljayBwcmlvcml0eTwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJldmVuIj4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPlJUQzogSEFMX1JUQ0V4X1NldFdha2VVcFRpbWVyIFdVVFdGIG1hbmFnZW1lbnQgcmV3b3JrZWQgdG8gYmUgYWxpZ25lZCB3aXRoIFJlZmVyZW5jZSBNYW51YWw8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0ib2RkIj4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPlJUQzogSU5JVEYgY2FuIHJpc2UgdG9vIGVhcmx5IHdoZW4gZW50ZXJpbmcgaW5pdCBtb2RlIGp1c3QgYWZ0ZXIgZXhpdGluZzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJldmVuIj4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPlJUQyA6IGZpeCBpc3N1ZSBpbiBkZWZpbmUgd2l0aCBTVE0zMkw0IExMIFJUQyBtb250aCBtYWNyb3M8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0ib2RkIj4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPlJUQyA6IFJlbW92ZSBBTFJCV0YgYW5kIEFMUkFXRiBiaXRzPC90ZD4KKzwvdHI+Cis8dHIgY2xhc3M9ImV2ZW4iPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+VElNOiBDb2RlU29uYXIgd2FybmluZ3MgYWJvdXQgdXNlbGVzcyBhc3NpZ25tZW50IGluIEhBTF9USU1FeF9Db25maWdCcmVha0lucHV0KCk8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPgogPGgyIGlkPSJkZXZlbG9wbWVudC10b29sY2hhaW5zLWFuZC1jb21waWxlcnMiPkRldmVsb3BtZW50IFRvb2xjaGFpbnMgYW5kIENvbXBpbGVyczwvaDI+CiA8dWw+CiA8bGk+SUFSIEVtYmVkZGVkIFdvcmtiZW5jaCBmb3IgQVJNIChFV0FSTSkgdG9vbGNoYWluIFY4LjIwLjI8L2xpPgpAQCAtNjEsNiArMTQyLDI3IEBACiA8dWw+CiA8bGk+U1RNMzJHNDMxLzQxeHg8L2xpPgogPGxpPlNUTTMyRzQ3MXh4PC9saT4KKzxsaT5TVE0zMkc0NzMvPHN0cm9uZz44M3h4PC9zdHJvbmc+PC9saT4KKzxsaT5TVE0zMkc0NzQvODR4eDwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMC4wIC8gMTItQXByaWwtMjAxOTwvbGFiZWw+Cis8ZGl2PgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMyBpZD0iZmlyc3QtcmVsZWFzZSI+Rmlyc3QgcmVsZWFzZTwvaDM+Cis8cD5GaXJzdCBvZmZpY2lhbCByZWxlYXNlIG9mIEhBTCAoSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIpIGFuZCBMTCAoTG93IGxheWVycykgZHJpdmVycyB0byBzdXBwb3J0IFNUTTMyRzQzMS80MXh4LCBTVE0zMkc0NzF4eCwgU1RNMzJHNDczLzgzeHggYW5kIFNUTTMyRzQ3NC84NHh4LjwvcD4KKzxoMiBpZD0iZGV2ZWxvcG1lbnQtdG9vbGNoYWlucy1hbmQtY29tcGlsZXJzLTEiPkRldmVsb3BtZW50IFRvb2xjaGFpbnMgYW5kIENvbXBpbGVyczwvaDI+Cis8dWw+Cis8bGk+SUFSIEVtYmVkZGVkIFdvcmtiZW5jaCBmb3IgQVJNIChFV0FSTSkgdG9vbGNoYWluIFY4LjIwLjI8L2xpPgorPGxpPlJlYWxWaWV3IE1pY3JvY29udHJvbGxlciBEZXZlbG9wbWVudCBLaXQgKE1ESy1BUk0pIHRvb2xjaGFpbiBWNS4yNTwvbGk+Cis8bGk+U3lzdGVtIFdvcmtiZW5jaCBTVE0zMiAoU1c0U1RNMzIpIHRvb2xjaGFpbiBWMi43LjI8L2xpPgorPC91bD4KKzxoMiBpZD0ic3VwcG9ydGVkLWRldmljZXMtMSI+U3VwcG9ydGVkIERldmljZXM8L2gyPgorPHVsPgorPGxpPlNUTTMyRzQzMS80MXh4PC9saT4KKzxsaT5TVE0zMkc0NzF4eDwvbGk+CiA8bGk+U1RNMzJHNDczeHg8L2xpPgogPGxpPlNUTTMyRzQ3NC84NHh4PC9saT4KIDwvdWw+CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbC5jIGIvU3JjL3N0bTMyZzR4eF9oYWwuYwppbmRleCAxOWJlYjE0Li5lOGE4YjJhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbC5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsLmMKQEAgLTIxLDcgKzIxLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC01Miw3ICs1Miw3IEBACiAgICogQGJyaWVmIFNUTTMyRzR4eCBIQUwgRHJpdmVyIHZlcnNpb24gbnVtYmVyICRWRVJTSU9OJAogICAqLwogI2RlZmluZSBfX1NUTTMyRzR4eF9IQUxfVkVSU0lPTl9NQUlOICAgKDB4MDFVKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovCi0jZGVmaW5lIF9fU1RNMzJHNHh4X0hBTF9WRVJTSU9OX1NVQjEgICAoMHgwMFUpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8KKyNkZWZpbmUgX19TVE0zMkc0eHhfSEFMX1ZFUlNJT05fU1VCMSAgICgweDAxVSkgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLwogI2RlZmluZSBfX1NUTTMyRzR4eF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MDBVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCiAjZGVmaW5lIF9fU1RNMzJHNHh4X0hBTF9WRVJTSU9OX1JDICAgICAoMHgwMFUpIC8qITwgWzc6MF0gIHJlbGVhc2UgY2FuZGlkYXRlICovCiAjZGVmaW5lIF9fU1RNMzJHNHh4X0hBTF9WRVJTSU9OICAgICAgICAgKChfX1NUTTMyRzR4eF9IQUxfVkVSU0lPTl9NQUlOIDw8IDI0VSlcCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmIFNldCBuZXcgdGljayBGcmVxLgotICAqIEByZXR2YWwgU3RhdHVzCisgICogQHJldHZhbCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TZXRUaWNrRnJlcSh1aW50MzJfdCBGcmVxKQogewpAQCAtMzU2LDEwICszNTYsMTIgQEAKIAogICBpZiAodXdUaWNrRnJlcSAhPSBGcmVxKQogICB7Ci0gICAgdXdUaWNrRnJlcSA9IEZyZXE7Ci0KICAgICAvKiBBcHBseSB0aGUgbmV3IHRpY2sgRnJlcSAgKi8KICAgICBzdGF0dXMgPSBIQUxfSW5pdFRpY2sodXdUaWNrUHJpbyk7CisgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgICAgeworICAgICAgdXdUaWNrRnJlcSA9IEZyZXE7CisgICAgfQogICB9CiAKICAgcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2FkYy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfYWRjLmMKaW5kZXggMTAzNGI1ZS4uMTkxY2ZjOCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfYWRjLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfYWRjLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2FkY19leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfYWRjX2V4LmMKaW5kZXggZWMwODU3Yi4uZDJlYjY5MCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfYWRjX2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfYWRjX2V4LmMKQEAgLTI4LDcgKzI4LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9jb21wLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9jb21wLmMKaW5kZXggMzcwMDc3OS4uYjMxYzBkYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfY29tcC5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX2NvbXAuYwpAQCAtNTcsNyArNTcsNiBAQAogICAgICAgKCsrKSBTZWxlY3QgdGhlIGh5c3RlcmVzaXMKICAgICAgICgrKykgU2VsZWN0IHRoZSBibGFua2luZyBzb3VyY2UKICAgICAgICgrKykgU2VsZWN0IHRoZSBvdXRwdXQgcG9sYXJpdHkKLSAgICAgICgrKykgU2VsZWN0IHRoZSBkZWdsaXRjaGVyIG1vZGUKIAogICAgICAgLUBALSBIQUxfQ09NUF9Jbml0KCkgY2FsbHMgaW50ZXJuYWxseSBfX0hBTF9SQ0NfU1lTQ0ZHX0NMS19FTkFCTEUoKQogICAgICAgICAgIHRvIGVuYWJsZSBpbnRlcm5hbCBjb250cm9sIGNsb2NrIG9mIHRoZSBjb21wYXJhdG9ycy4KQEAgLTE0NCw3ICsxNDMsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTI1Myw3ICsyNTIsNiBAQAogICAgIGFzc2VydF9wYXJhbShJU19DT01QX0hZU1RFUkVTSVMoaGNvbXAtPkluaXQuSHlzdGVyZXNpcykpOwogICAgIGFzc2VydF9wYXJhbShJU19DT01QX0JMQU5LSU5HU1JDX0lOU1RBTkNFKGhjb21wLT5JbnN0YW5jZSwgaGNvbXAtPkluaXQuQmxhbmtpbmdTcmNlKSk7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0NPTVBfVFJJR0dFUk1PREUoaGNvbXAtPkluaXQuVHJpZ2dlck1vZGUpKTsKLSAgICBhc3NlcnRfcGFyYW0oSVNfQ09NUF9ERUdMSVRDSEVSX01PREUoaGNvbXAtPkluaXQuRGVnbGl0Y2hlck1vZGUpKTsKIAogICAgIGlmKGhjb21wLT5TdGF0ZSA9PSBIQUxfQ09NUF9TVEFURV9SRVNFVCkKICAgICB7CkBAIC0yOTYsMTMgKzI5NCwxMiBAQAogICAgICAgICAgICAgICAgfCBoY29tcC0+SW5pdC5CbGFua2luZ1NyY2UKICAgICAgICAgICAgICAgIHwgaGNvbXAtPkluaXQuSHlzdGVyZXNpcwogICAgICAgICAgICAgICAgfCBoY29tcC0+SW5pdC5PdXRwdXRQb2wKLSAgICAgICAgICAgICAgIHwgaGNvbXAtPkluaXQuRGVnbGl0Y2hlck1vZGUKICAgICAgICAgICAgICAgKTsKIAogICAgIC8qIFNldCBwYXJhbWV0ZXJzIGluIENPTVAgcmVnaXN0ZXIgKi8KICAgICAvKiBOb3RlOiBVcGRhdGUgYWxsIGJpdHMgZXhjZXB0IHJlYWQtb25seSwgbG9jayBhbmQgZW5hYmxlIGJpdHMgKi8KICAgICBNT0RJRllfUkVHKGhjb21wLT5JbnN0YW5jZS0+Q1NSLAotICAgICAgICAgICAgICAgQ09NUF9DU1JfSU5NU0VMICAgfCBDT01QX0NTUl9JTlBTRUwgfCBDT01QX0NTUl9ERUdMSVRDSEVOIHwKKyAgICAgICAgICAgICAgIENPTVBfQ1NSX0lOTVNFTCAgIHwgQ09NUF9DU1JfSU5QU0VMIHwKICAgICAgICAgICAgICAgIENPTVBfQ1NSX1BPTEFSSVRZIHwgQ09NUF9DU1JfSFlTVCAgIHwKICAgICAgICAgICAgICAgIENPTVBfQ1NSX0JMQU5LSU5HIHwgQ09NUF9DU1JfQlJHRU4gIHwgQ09NUF9DU1JfU0NBTEVOLAogICAgICAgICAgICAgICAgdG1wX2NzcgpAQCAtMzMzLDcgKzMzMCw3IEBACiAgICAgICAvKiBDb25maWd1cmUgRVhUSSByaXNpbmcgZWRnZSAqLwogICAgICAgaWYoKGhjb21wLT5Jbml0LlRyaWdnZXJNb2RlICYgQ09NUF9FWFRJX1JJU0lORykgIT0gMFVMKQogICAgICAgewotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICAgICAgICAgaWYoKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNikgfHwgKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNykpCiAgICAgICAgIHsKICAgICAgICAgICBMTF9FWFRJX0VuYWJsZVJpc2luZ1RyaWdfMzJfNjMoZXh0aV9saW5lKTsKQEAgLTM0OCw3ICszNDUsNyBAQAogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICAgICAgICAgaWYoKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNikgfHwgKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNykpCiAgICAgICAgIHsKICAgICAgICAgICBMTF9FWFRJX0Rpc2FibGVSaXNpbmdUcmlnXzMyXzYzKGV4dGlfbGluZSk7CkBAIC0zNjUsNyArMzYyLDcgQEAKICAgICAgIC8qIENvbmZpZ3VyZSBFWFRJIGZhbGxpbmcgZWRnZSAqLwogICAgICAgaWYoKGhjb21wLT5Jbml0LlRyaWdnZXJNb2RlICYgQ09NUF9FWFRJX0ZBTExJTkcpICE9IDBVTCkKICAgICAgIHsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgICAgIGlmKChoY29tcC0+SW5zdGFuY2UgPT0gQ09NUDYpIHx8IChoY29tcC0+SW5zdGFuY2UgPT0gQ09NUDcpKQogICAgICAgICB7CiAgICAgICAgICAgTExfRVhUSV9FbmFibGVGYWxsaW5nVHJpZ18zMl82MyhleHRpX2xpbmUpOwpAQCAtMzgwLDcgKzM3Nyw3IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgICAgICBpZigoaGNvbXAtPkluc3RhbmNlID09IENPTVA2KSB8fCAoaGNvbXAtPkluc3RhbmNlID09IENPTVA3KSkKICAgICAgICAgewogICAgICAgICAgIExMX0VYVElfRGlzYWJsZUZhbGxpbmdUcmlnXzMyXzYzKGV4dGlfbGluZSk7CkBAIC0zOTUsNyArMzkyLDcgQEAKICAgICAgIH0KIAogICAgICAgLyogQ2xlYXIgQ09NUCBFWFRJIHBlbmRpbmcgYml0IChpZiBhbnkpICovCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgICAgaWYoKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNikgfHwgKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNykpCiAgICAgICB7CiAgICAgICAgIExMX0VYVElfQ2xlYXJGbGFnXzMyXzYzKGV4dGlfbGluZSk7CkBAIC00MTEsNyArNDA4LDcgQEAKICAgICAgIC8qIENvbmZpZ3VyZSBFWFRJIGV2ZW50IG1vZGUgKi8KICAgICAgIGlmKChoY29tcC0+SW5pdC5UcmlnZ2VyTW9kZSAmIENPTVBfRVhUSV9FVkVOVCkgIT0gMFVMKQogICAgICAgewotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICAgICAgICAgaWYoKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNikgfHwgKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNykpCiAgICAgICAgIHsKICAgICAgICAgICBMTF9FWFRJX0VuYWJsZUV2ZW50XzMyXzYzKGV4dGlfbGluZSk7CkBAIC00MjYsNyArNDIzLDcgQEAKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgICAgIGlmKChoY29tcC0+SW5zdGFuY2UgPT0gQ09NUDYpIHx8IChoY29tcC0+SW5zdGFuY2UgPT0gQ09NUDcpKQogICAgICAgICB7CiAgICAgICAgICAgTExfRVhUSV9EaXNhYmxlRXZlbnRfMzJfNjMoZXh0aV9saW5lKTsKQEAgLTQ0Myw3ICs0NDAsNyBAQAogICAgICAgLyogQ29uZmlndXJlIEVYVEkgaW50ZXJydXB0IG1vZGUgKi8KICAgICAgIGlmKChoY29tcC0+SW5pdC5UcmlnZ2VyTW9kZSAmIENPTVBfRVhUSV9JVCkgIT0gMFVMKQogICAgICAgewotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICAgICAgICAgaWYoKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNikgfHwgKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNykpCiAgICAgICAgIHsKICAgICAgICAgICBMTF9FWFRJX0VuYWJsZUlUXzMyXzYzKGV4dGlfbGluZSk7CkBAIC00NTgsNyArNDU1LDcgQEAKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgICAgIGlmKChoY29tcC0+SW5zdGFuY2UgPT0gQ09NUDYpIHx8IChoY29tcC0+SW5zdGFuY2UgPT0gQ09NUDcpKQogICAgICAgICB7CiAgICAgICAgICAgTExfRVhUSV9EaXNhYmxlSVRfMzJfNjMoZXh0aV9saW5lKTsKQEAgLTQ3NSw3ICs0NzIsNyBAQAogICAgIGVsc2UKICAgICB7CiAgICAgICAvKiBEaXNhYmxlIEVYVEkgZXZlbnQgbW9kZSAqLwotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICAgICAgIGlmKChoY29tcC0+SW5zdGFuY2UgPT0gQ09NUDYpIHx8IChoY29tcC0+SW5zdGFuY2UgPT0gQ09NUDcpKQogICAgICAgewogICAgICAgICBMTF9FWFRJX0Rpc2FibGVFdmVudF8zMl82MyhleHRpX2xpbmUpOwpAQCAtNDg5LDcgKzQ4Niw3IEBACiAjZW5kaWYKIAogICAgICAgLyogRGlzYWJsZSBFWFRJIGludGVycnVwdCBtb2RlICovCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgICAgaWYoKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNikgfHwgKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNykpCiAgICAgICB7CiAgICAgICAgIExMX0VYVElfRGlzYWJsZUlUXzMyXzYzKGV4dGlfbGluZSk7CkBAIC04ODMsNyArODgwLDcgQEAKICAgdWludDMyX3QgdG1wX2NvbXBfZXh0aV9mbGFnX3NldCA9IDBVTDsKIAogICAvKiBDaGVjayBDT01QIEVYVEkgZmxhZyAqLwotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICAgaWYoKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNikgfHwgKGhjb21wLT5JbnN0YW5jZSA9PSBDT01QNykpCiAgIHsKICAgICBpZihMTF9FWFRJX0lzQWN0aXZlRmxhZ18zMl82MyhleHRpX2xpbmUpICE9IDBVTCkKQEAgLTkwOCw3ICs5MDUsNyBAQAogICBpZih0bXBfY29tcF9leHRpX2ZsYWdfc2V0ICE9IDBVTCkKICAgewogICAgICAgLyogQ2xlYXIgQ09NUCBFWFRJIGxpbmUgcGVuZGluZyBiaXQgKi8KLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgICBpZih0bXBfY29tcF9leHRpX2ZsYWdfc2V0ID09IDJVTCkKICAgICAgIHsKICAgICAgICAgTExfRVhUSV9DbGVhckZsYWdfMzJfNjMoZXh0aV9saW5lKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2NvcnRleC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfY29ydGV4LmMKaW5kZXggYTgwYmE1ZC4uMDBlNjEwOCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfY29ydGV4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfY29ydGV4LmMKQEAgLTkwLDcgKzkwLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9jcmMuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX2NyYy5jCmluZGV4IGU3NTM2YTIuLmYxYjFmZWYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX2NyYy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX2NyYy5jCkBAIC0zMSw3ICszMSw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfY3JjX2V4LmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9jcmNfZXguYwppbmRleCAzMGRmY2Q5Li42NTJlNzhmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9jcmNfZXguYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9jcmNfZXguYwpAQCAtMTgsNyArMTgsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2NyeXAuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX2NyeXAuYwppbmRleCBlYjJhYzViLi45ZWNlZDc5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9jcnlwLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfY3J5cC5jCkBAIC0yNDgsMTMgKzI0OCwxNSBAQAogICAgICAgICAgKCMjKSBGaW5hbCBwaGFzZTogcGVyaXBoZXJhbCBnZW5lcmF0ZXMgdGhlIGF1dGhlbnRpY2F0ZWQgdGFnIChUKSB1c2luZyB0aGUgbGFzdCBibG9jayBvZiBkYXRhLgogCiAgICoqKiBDYWxsYmFjayByZWdpc3RyYXRpb24gKioqCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisgIFsuLl0KICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSAgVVNFX0hBTF9DUllQX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAgIFVzZSBGdW5jdGlvbnMgQHJlZiBIQUxfQ1JZUF9SZWdpc3RlckNhbGxiYWNrKCkgb3IgSEFMX0NSWVBfUmVnaXN0ZXJYWFhDYWxsYmFjaygpCiAgIHRvIHJlZ2lzdGVyIGFuIGludGVycnVwdCBjYWxsYmFjay4KIAorICBbLi5dCiAgIEZ1bmN0aW9uIEByZWYgSEFMX0NSWVBfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBJbkNwbHRDYWxsYmFjayAgICAgOiAgSW5wdXQgRklGTyB0cmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2suCiAgICAgKCspIE91dENwbHRDYWxsYmFjayAgICA6IE91dHB1dCBGSUZPIHRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFjay4KQEAgLTI2NCw2ICsyNjYsNyBAQAogICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKKyAgWy4uXQogICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfQ1JZUF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgIHdlYWsgZnVuY3Rpb24uCiAgIEByZWYgSEFMX0NSWVBfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLApAQCAtMjc1LDYgKzI3OCw3IEBACiAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICA6IENSWVAgTXNwSW5pdC4KICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogQ1JZUCBNc3BEZUluaXQuCiAKKyAgWy4uXQogICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfQ1JZUF9Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9DUllQX1NUQVRFX1JFU0VUCiAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucyA6CiAgIGV4YW1wbGVzIEByZWYgSEFMX0NSWVBfSW5DcGx0Q2FsbGJhY2soKSAsIEByZWYgSEFMX0NSWVBfT3V0Q3BsdENhbGxiYWNrKCkuCkBAIC0yODQsNiArMjg4LDcgQEAKICAgaWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9DUllQX0luaXQoKSAvIEByZWYgSEFMX0NSWVBfRGVJbml0KCkKICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGZ1bmN0aW9ucyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQogCisgIFsuLl0KICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfQ1JZUF9TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKICAgaW4gSEFMX0NSWVBfU1RBVEVfUkVBRFkgb3IgSEFMX0NSWVBfU1RBVEVfUkVTRVQgc3RhdGUsCkBAIC0yOTIsMTQgKzI5NywxNiBAQAogICB1c2luZyBAcmVmIEhBTF9DUllQX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9DUllQX0RlSW5pdCgpCiAgIG9yIEByZWYgSEFMX0NSWVBfSW5pdCgpIGZ1bmN0aW9uLgogCisgIFsuLl0KICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCiAgIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCiAKIAogICAqKiogU3VzcGVuZC9SZXN1bWUgZmVhdHVyZSAqKioKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisgIFsuLl0KICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0NSWVBfU1VTUEVORF9SRVNVTUUgd2hlbiBzZXQgdG8gMQogICBhbGxvd3MgdGhlIHVzZXIgdG8gcmVzb3J0IHRvIHRoZSBzdXNwZW5kL3Jlc3VtZSBmZWF0dXJlLgogICBBIGxvdyBwcmlvcml0eSBibG9jayBwcm9jZXNzaW5nIGNhbiBiZSBzdXNwZW5kZWQgdG8gcHJvY2VzcyBhIGhpZ2ggcHJpb3JpdHkgYmxvY2sKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2RhYy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfZGFjLmMKaW5kZXggZjJiNTczMS4uMzc3ZDBiOCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZGFjLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfZGFjLmMKQEAgLTEzNCw4ICsxMzQsNiBAQAogICAgICAgICAgJiBEQUNfQ2hhbm5lbENvbmZUeXBlRGVmLkRBQ19TYW1wbGVBbmRIb2xkQ29uZmlnLkRBQ19TYW1wbGVUaW1lLAogICAgICAgICAgICBEQUNfSG9sZFRpbWUgJiBEQUNfUmVmcmVzaFRpbWU7CiAKLQotCiAgICAgICAgKioqIERBQyBjYWxpYnJhdGlvbiBmZWF0dXJlICoqKgogICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICBbLi5dCkBAIC0zMTYsOCArMzE0LDYgQEAKICAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCiAgICAgICBhbmQgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2tzIGFyZSB1c2VkLgogCi0KLQogICAgICAqKiogREFDIEhBTCBkcml2ZXIgbWFjcm9zIGxpc3QgKioqCiAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICBbLi5dCkBAIC0zMzUsNyArMzMxLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0zNzYsNyArMzcyLDYgQEAKICAgKi8KIAogLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTU5Myw3ICs1ODgsNyBAQAogICBpZiAoQ2hhbm5lbCA9PSBEQUNfQ0hBTk5FTF8xKQogICB7CiAgICAgLyogQ2hlY2sgaWYgc29mdHdhcmUgdHJpZ2dlciBlbmFibGVkICovCi0gICAgaWYgKChoZGFjLT5JbnN0YW5jZS0+Q1IgJiAoREFDX0NSX1RFTjEgfCBEQUNfQ1JfVFNFTDEpKSA9PSBEQUNfQ1JfVEVOMSkKKyAgICBpZiAoKGhkYWMtPkluc3RhbmNlLT5DUiAmIChEQUNfQ1JfVEVOMSB8IERBQ19DUl9UU0VMMSkpID09IERBQ19UUklHR0VSX1NPRlRXQVJFKQogICAgIHsKICAgICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgREFDIHNvZnR3YXJlIGNvbnZlcnNpb24gKi8KICAgICAgIFNFVF9CSVQoaGRhYy0+SW5zdGFuY2UtPlNXVFJJR1IsIERBQ19TV1RSSUdSX1NXVFJJRzEpOwpAQCAtNjAyLDcgKzU5Nyw3IEBACiAgIGVsc2UKICAgewogICAgIC8qIENoZWNrIGlmIHNvZnR3YXJlIHRyaWdnZXIgZW5hYmxlZCAqLwotICAgIGlmICgoaGRhYy0+SW5zdGFuY2UtPkNSICYgKERBQ19DUl9URU4yIHwgREFDX0NSX1RTRUwyKSkgPT0gREFDX0NSX1RFTjIpCisgICAgaWYgKChoZGFjLT5JbnN0YW5jZS0+Q1IgJiAoREFDX0NSX1RFTjIgfCBEQUNfQ1JfVFNFTDIpKSA9PSAoREFDX1RSSUdHRVJfU09GVFdBUkUgPDwgKENoYW5uZWwgJiAweDEwVUwpKSkKICAgICB7CiAgICAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIERBQyBzb2Z0d2FyZSBjb252ZXJzaW9uKi8KICAgICAgIFNFVF9CSVQoaGRhYy0+SW5zdGFuY2UtPlNXVFJJR1IsIERBQ19TV1RSSUdSX1NXVFJJRzIpOwpAQCAtMTI3OSw3ICsxMjc0LDYgQEAKICAgdG1wcmVnMSB8PSB0bXByZWcyIDw8IChDaGFubmVsICYgMHgxMFVMKTsKICAgLyogV3JpdGUgdG8gREFDIENSICovCiAgIGhkYWMtPkluc3RhbmNlLT5DUiA9IHRtcHJlZzE7Ci0KICAgLyogRGlzYWJsZSB3YXZlIGdlbmVyYXRpb24gKi8KICAgaGRhYy0+SW5zdGFuY2UtPkNSICY9IH4oREFDX0NSX1dBVkUxIDw8IChDaGFubmVsICYgMHgxMFVMKSk7CiAKQEAgLTEzNzMsOCArMTM2Nyw4IEBACiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX0hBTEZfQ09NUExFVEVfQ0JfSUQgIERBQyBDSDIgSGFsZiBDb21wbGV0ZSBDYWxsYmFjayBJRAogICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX0NIMl9FUlJPUl9JRCAgICAgICAgICAgICBEQUMgQ0gyIEVycm9yIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX1VOREVSUlVOX0NCX0lEICAgICAgIERBQyBDSDIgVW5kZXJSdW4gQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BfSU5JVF9DQl9JRCAgICAgICAgICAgREFDIE1TUCBJbml0IENhbGxiYWNrIElECi0gICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfTVNQX0RFSU5JVF9DQl9JRCAgICAgICAgIERBQyBNU1AgRGVJbml0IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgIERBQyBNU1AgSW5pdCBDYWxsYmFjayBJRAorICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX01TUERFSU5JVF9DQl9JRCAgICAgICAgICBEQUMgTVNQIERlSW5pdCBDYWxsYmFjayBJRAogICAqCiAgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KICAgKiBAcmV0dmFsIHN0YXR1cwpAQCAtMTQyMiwxMCArMTQxNiwxMCBAQAogICAgICAgY2FzZSBIQUxfREFDX0NIMl9VTkRFUlJVTl9DQl9JRCA6CiAgICAgICAgIGhkYWMtPkRNQVVuZGVycnVuQ2FsbGJhY2tDaDIgPSBwQ2FsbGJhY2s7CiAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBIQUxfREFDX01TUF9JTklUX0NCX0lEIDoKKyAgICAgIGNhc2UgSEFMX0RBQ19NU1BJTklUX0NCX0lEIDoKICAgICAgICAgaGRhYy0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEIDoKKyAgICAgIGNhc2UgSEFMX0RBQ19NU1BERUlOSVRfQ0JfSUQgOgogICAgICAgICBoZGFjLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0IDoKQEAgLTE0NDAsMTAgKzE0MzQsMTAgQEAKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7Ci0gICAgICBjYXNlIEhBTF9EQUNfTVNQX0lOSVRfQ0JfSUQgOgorICAgICAgY2FzZSBIQUxfREFDX01TUElOSVRfQ0JfSUQgOgogICAgICAgICBoZGFjLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CiAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBIQUxfREFDX01TUF9ERUlOSVRfQ0JfSUQgOgorICAgICAgY2FzZSBIQUxfREFDX01TUERFSU5JVF9DQl9JRCA6CiAgICAgICAgIGhkYWMtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOwogICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQgOgpAQCAtMTQ4MSw4ICsxNDc1LDggQEAKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfSEFMRl9DT01QTEVURV9DQl9JRCAgICAgREFDIENIMiBIYWxmIENvbXBsZXRlIENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQ0gyX0VSUk9SX0lEICAgICAgICAgICAgICAgIERBQyBDSDIgRXJyb3IgQ2FsbGJhY2sgSUQKICAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19DSDJfVU5ERVJSVU5fQ0JfSUQgICAgICAgICAgREFDIENIMiBVbmRlclJ1biBDYWxsYmFjayBJRAotICAqICAgICAgICAgIEBhcmcgQHJlZiBIQUxfREFDX01TUF9JTklUX0NCX0lEICAgICAgICAgICAgICBEQUMgTVNQIEluaXQgQ2FsbGJhY2sgSUQKLSAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEICAgICAgICAgICAgREFDIE1TUCBEZUluaXQgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICBAYXJnIEByZWYgSEFMX0RBQ19NU1BJTklUX0NCX0lEICAgICAgICAgICAgICAgREFDIE1TUCBJbml0IENhbGxiYWNrIElECisgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgIERBQyBNU1AgRGVJbml0IENhbGxiYWNrIElECiAgICogICAgICAgICAgQGFyZyBAcmVmIEhBTF9EQUNfQUxMX0NCX0lEICAgICAgICAgICAgICAgICAgIERBQyBBbGwgY2FsbGJhY2tzCiAgICogQHJldHZhbCBzdGF0dXMKICAgKi8KQEAgLTE1MjEsMTAgKzE1MTUsMTAgQEAKICAgICAgIGNhc2UgSEFMX0RBQ19DSDJfVU5ERVJSVU5fQ0JfSUQgOgogICAgICAgICBoZGFjLT5ETUFVbmRlcnJ1bkNhbGxiYWNrQ2gyID0gSEFMX0RBQ0V4X0RNQVVuZGVycnVuQ2FsbGJhY2tDaDI7CiAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBIQUxfREFDX01TUF9JTklUX0NCX0lEIDoKKyAgICAgIGNhc2UgSEFMX0RBQ19NU1BJTklUX0NCX0lEIDoKICAgICAgICAgaGRhYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0RBQ19Nc3BJbml0OwogICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgSEFMX0RBQ19NU1BfREVJTklUX0NCX0lEIDoKKyAgICAgIGNhc2UgSEFMX0RBQ19NU1BERUlOSVRfQ0JfSUQgOgogICAgICAgICBoZGFjLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9EQUNfTXNwRGVJbml0OwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgSEFMX0RBQ19BTExfQ0JfSUQgOgpAQCAtMTU1MSwxMCArMTU0NSwxMCBAQAogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICAgIGNhc2UgSEFMX0RBQ19NU1BfSU5JVF9DQl9JRCA6CisgICAgICBjYXNlIEhBTF9EQUNfTVNQSU5JVF9DQl9JRCA6CiAgICAgICAgIGhkYWMtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9EQUNfTXNwSW5pdDsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEhBTF9EQUNfTVNQX0RFSU5JVF9DQl9JRCA6CisgICAgICBjYXNlIEhBTF9EQUNfTVNQREVJTklUX0NCX0lEIDoKICAgICAgICAgaGRhYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfREFDX01zcERlSW5pdDsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0IDoKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2RhY19leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfZGFjX2V4LmMKaW5kZXggNDZkMTgyNy4uYjc2NzI2NSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZGFjX2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfZGFjX2V4LmMKQEAgLTM3LDYgKzM3LDcgQEAKICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICgrKSBVc2UgSEFMX0RBQ0V4X1RyaWFuZ2xlV2F2ZUdlbmVyYXRlKCkgdG8gZ2VuZXJhdGUgVHJpYW5nbGUgc2lnbmFsLgogICAgICAgKCspIFVzZSBIQUxfREFDRXhfTm9pc2VXYXZlR2VuZXJhdGUoKSB0byBnZW5lcmF0ZSBOb2lzZSBzaWduYWwuCisKICAgICAgICgrKSBVc2UgSEFMX0RBQ0V4X1Nhd3Rvb3RoV2F2ZUdlbmVyYXRlKCkgdG8gZ2VuZXJhdGUgc2F3dG9vdGggc2lnbmFsLgogICAgICAgKCspIFVzZSBIQUxfREFDRXhfU2F3dG9vdGhXYXZlRGF0YVJlc2V0KCkgdG8gcmVzZXQgc2F3dG9vdGggd2F2ZS4KICAgICAgICgrKSBVc2UgSEFMX0RBQ0V4X1Nhd3Rvb3RoV2F2ZURhdGFTdGVwKCkgdG8gc3RlcCBzYXd0b290aCB3YXZlLgpAQCAtNTEsNyArNTIsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2RtYS5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfZG1hLmMKaW5kZXggNWJkYmFkNC4uOTQ5MzdlNiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZG1hLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfZG1hLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0xMDU3LDcgKzEwNTcsNyBAQAogICBlbHNlCiAgIHsKICAgICAvKiBETUEyICovCi0jaWYgZGVmaW5lZCAoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQgKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkIChTVE0zMkc0NzF4eCkgfHwgZGVmaW5lZCAoU1RNMzJHNDg0eHgpCisjaWYgZGVmaW5lZCAoU1RNMzJHNDcxeHgpIHx8IGRlZmluZWQgKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkIChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZCAoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQgKFNUTTMyRzQ4NHh4KQogICAgIERNQU1VWDFfQ2hhbm5lbEJhc2UgPSBETUFNVVgxX0NoYW5uZWw4OwogI2VsaWYgZGVmaW5lZCAoU1RNMzJHNDMxeHgpIHx8IGRlZmluZWQgKFNUTTMyRzQ0MXh4KSB8fCBkZWZpbmVkIChTVE0zMkdCSzFDQikKICAgICBETUFNVVgxX0NoYW5uZWxCYXNlID0gRE1BTVVYMV9DaGFubmVsNjsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2RtYV9leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfZG1hX2V4LmMKaW5kZXggNGE5ZjE0OS4uN2E3ZWE3MCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZG1hX2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfZG1hX2V4LmMKQEAgLTI5LDcgKzI5LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9leHRpLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9leHRpLmMKaW5kZXggMGVmNzdkYy4uNzRmYTYwMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZXh0aS5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX2V4dGkuYwpAQCAtNzMsNyArNzMsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2ZkY2FuLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9mZGNhbi5jCmluZGV4IDMwYWNlOWUuLmQ0MzUwYjQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX2ZkY2FuLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfZmRjYW4uYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfZmxhc2guYyBiL1NyYy9zdG0zMmc0eHhfaGFsX2ZsYXNoLmMKaW5kZXggZWIwODhjMC4uOWI3OTdjYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZmxhc2guYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9mbGFzaC5jCkBAIC03NSw3ICs3NSw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCiAgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfZmxhc2hfZXguYyBiL1NyYy9zdG0zMmc0eHhfaGFsX2ZsYXNoX2V4LmMKaW5kZXggOTBkYmNkZS4uNjUxZGExYyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZmxhc2hfZXguYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9mbGFzaF9leC5jCkBAIC01OCw3ICs1OCw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCiAgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfZmxhc2hfcmFtZnVuYy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfZmxhc2hfcmFtZnVuYy5jCmluZGV4IGZlMjIxYWQuLjJlMTc3YWEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX2ZsYXNoX3JhbWZ1bmMuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9mbGFzaF9yYW1mdW5jLmMKQEAgLTM2LDcgKzM2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+CisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKICAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9mbWFjLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9mbWFjLmMKaW5kZXggOTM2N2NlMS4uZjU4MTZiYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZm1hYy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX2ZtYWMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKiBAZmlsZSAgICBzdG0zMmc0eHhfZm1hYy5jCisgICogQGZpbGUgICAgc3RtMzJnNHh4X2hhbF9mbWFjLmMKICAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQogICAqIEBicmllZiAgIEZNQUMgSEFMIG1vZHVsZSBkcml2ZXIuCiAgICogICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICAgICBvciBAcmVmIEhBTF9GTUFDX0luaXQoKSBmdW5jdGlvbi4KIAogICAgIFsuLl0KLSAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCisgICAgICBXaGVuIHRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCiAgICAgICBhbmQgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2tzIGFyZSB1c2VkLgogCkBAIC0xOTcsNyArMTk3LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9ncGlvLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9ncGlvLmMKaW5kZXggMDMxN2Y3MC4uM2E4ZGZkMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfZ3Bpby5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX2dwaW8uYwpAQCAtOTEsNyArOTEsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTMxNyw5ICszMTcsNiBAQAogICAgICAgdG1wICY9ICgweDBGVUwgPDwgKDRVICogKHBvc2l0aW9uICYgMHgwM1UpKSk7CiAgICAgICBpZiAodG1wID09IChHUElPX0dFVF9JTkRFWChHUElPeCkgPDwgKDRVICogKHBvc2l0aW9uICYgMHgwM1UpKSkpCiAgICAgICB7Ci0gICAgICAgIHRtcCA9IDB4MEZVTCA8PCAoNFUgKiAocG9zaXRpb24gJiAweDAzVSkpOwotICAgICAgICBTWVNDRkctPkVYVElDUltwb3NpdGlvbiA+PiAyVV0gJj0gfnRtcDsKLQogICAgICAgICAvKiBDbGVhciBFWFRJIGxpbmUgY29uZmlndXJhdGlvbiAqLwogICAgICAgICBFWFRJLT5JTVIxICY9IH4oaW9jdXJyZW50KTsKICAgICAgICAgRVhUSS0+RU1SMSAmPSB+KGlvY3VycmVudCk7CkBAIC0zMjcsNiArMzI0LDkgQEAKICAgICAgICAgLyogQ2xlYXIgUmlzaW5nIEZhbGxpbmcgZWRnZSBjb25maWd1cmF0aW9uICovCiAgICAgICAgIEVYVEktPlJUU1IxICY9IH4oaW9jdXJyZW50KTsKICAgICAgICAgRVhUSS0+RlRTUjEgJj0gfihpb2N1cnJlbnQpOworCisgICAgICAgIHRtcCA9IDB4MEZVTCA8PCAoNFUgKiAocG9zaXRpb24gJiAweDAzVSkpOworICAgICAgICBTWVNDRkctPkVYVElDUltwb3NpdGlvbiA+PiAyVV0gJj0gfnRtcDsKICAgICAgIH0KIAogICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdQSU8gTW9kZSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2hydGltLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9ocnRpbS5jCmluZGV4IGI4ZWI1MjcuLjdhYTQ4ZTggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX2hydGltLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfaHJ0aW0uYwpAQCAtMjkwLDYgKzI5MCw3IEBACiAgICAgIFVzZSBGdW5jdGlvbnMgSEFMX0hSVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSBvciBIQUxfSFJUSU1fVElNeFJlZ2lzdGVyQ2FsbGJhY2soKQogICAgICB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCiAKKyAgICAgWy4uXQogICAgICBGdW5jdGlvbiBIQUxfSFJUSU1fUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICgrKSBGYXVsdDFDYWxsYmFjayAgICAgICAgICAgICAgIDogRmF1bHQgMSBpbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICAoKykgRmF1bHQyQ2FsbGJhY2sgICAgICAgICAgICAgICA6IEZhdWx0IDIgaW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9uCkBAIC0zMDUsNiArMzA2LDcgQEAKICAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IEhSVElNIE1zcEluaXQgY2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICAgICA6IEhSVElNIE1zcEluaXQgY2FsbGJhY2sgZnVuY3Rpb24KIAorICAgICBbLi5dCiAgICAgIEZ1bmN0aW9uIEhBTF9IUlRJTV9USU14UmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICgrKSBSZWdpc3RlcnNVcGRhdGVDYWxsYmFjayAgIDogVGltZXIgeCBVcGRhdGUgaW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9uCiAgICAgICAgKCspIFJlcGV0aXRpb25FdmVudENhbGxiYWNrICAgOiBUaW1lciB4IFJlcGV0aXRpb24gaW50ZXJydXB0IGNhbGxiYWNrIGZ1bmN0aW9uCkBAIC0zMjIsMTMgKzMyNCwxNiBAQAogICAgICAgICgrKSBPdXRwdXQyUmVzZXRDYWxsYmFjayAgICAgIDogVGltZXIgeCBvdXRwdXQgMiByZXNldCBpbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICAoKykgQnVyc3RETUFUcmFuc2ZlckNhbGxiYWNrICA6IFRpbWVyIHggQnVyc3QgRE1BIGNvbXBsZXRlZCBpbnRlcnJ1cHQgY2FsbGJhY2sgZnVuY3Rpb24KIAorICAgICBbLi5dCiAgICAgIEJvdGggZnVuY3Rpb25zIHRha2UgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLCB0aGUgQ2FsbGJhY2sgSUQKICAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAorICAgICBbLi5dCiAgICAgIFVzZSBmdW5jdGlvbiBIQUxfSFJUSU1fVW5SZWdpc3RlckNhbGxiYWNrIG9yIEhBTF9IUlRJTV9USU14VW5SZWdpc3RlckNhbGxiYWNrCiAgICAgIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQgd2VhayBmdW5jdGlvbi4gQm90aCBmdW5jdGlvbnMgdGFrZSAgYXMgcGFyYW1ldGVycwogICAgICB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAKKyAgICAgWy4uXQogICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0hSVElNX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0hSVElNX1NUQVRFX1JFU0VUCiAgICAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucyAoZS5nIEhBTF9IUlRJTV9GYXVsdDFDYWxsYmFjaykKICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzZXQgdG8gdGhlIGxlZ2FjeQpAQCAtMzM3LDE0ICszNDIsMTYgQEAKICAgICAgbm90IG51bGwsIHRoZSBIQUxfSFJUSU1fSW5pdCgpLyBIQUxfSFJUSU1fRGVJbml0KCkga2VlcCBhbmQgdXNlIHRoZSB1c2VyCiAgICAgIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKSB3aGF0ZXZlciB0aGUgc3RhdGUuCiAKKyAgICAgWy4uXQogICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEhBTF9IUlRJTV9TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICAgICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKICAgICAgaW4gSEFMX0hSVElNX1NUQVRFX1JFQURZIG9yIEhBTF9IUlRJTV9TVEFURV9SRVNFVCBzdGF0ZXMsIHRodXMgcmVnaXN0ZXJlZAogICAgICAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgIFRoZW4sIHRoZSB1c2VyIGZpcnN0IHJlZ2lzdGVycyB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKICAgICAgdXNpbmcgSEFMX0hSVElNX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfSFJUSU1fRGVJbml0KCkKLSAgICAgb3IgQHJlZiBIQUxfSFJUSU1fSW5pdCgpIGZ1bmN0aW9uLgorICAgICBvciBIQUxfSFJUSU1fSW5pdCgpIGZ1bmN0aW9uLgogCisgICAgIFsuLl0KICAgICAgV2hlbiB0aGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX0hSVElNX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgYW5kIGFsbAogICAgICBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucy4KQEAgLTM1NCw3ICszNjEsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTU4NzksOSArNTg4NiwxNCBAQAogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICAgICAgICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogQ2xlYXIgSFJUSU1fVElNeENSLkRFTENNUDIgYml0ZmllbGQgKi8KKyAgICAgICAgICBNT0RJRllfUkVHKGhocnRpbS0+SW5zdGFuY2UtPnNUaW1lcnhSZWdzW1RpbWVySWR4XS5USU14Q1IsIEhSVElNX1RJTUNSX0RFTENNUDIsIDBVKTsKKyAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAKQEAgLTU5MTksOSArNTkzMSwxNCBAQAogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICAgICAgICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogQ2xlYXIgSFJUSU1fVElNeENSLkRFTENNUDQgYml0ZmllbGQgKi8KKyAgICAgICAgICBNT0RJRllfUkVHKGhocnRpbS0+SW5zdGFuY2UtPnNUaW1lcnhSZWdzW1RpbWVySWR4XS5USU14Q1IsIEhSVElNX1RJTUNSX0RFTENNUDQsIDBVKTsKKyAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2kyYy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfaTJjLmMKaW5kZXggNWI0Mzc1Zi4uYmQzZWFjOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfaTJjLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfaTJjLmMKQEAgLTI5Myw3ICsyOTMsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2kyY19leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfaTJjX2V4LmMKaW5kZXggMGM2ZDA0Yi4uY2EzN2Q4NCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfaTJjX2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfaTJjX2V4LmMKQEAgLTM1LDcgKzM1LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9pMnMuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX2kycy5jCmluZGV4IGU2YzEzNDAuLjhkNDk3ZTMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX2kycy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX2kycy5jCkBAIC0xMTUsMTMgKzExNSwxMyBAQAogICAgICAgICAgIFVzZSBGdW5jdGlvbnMgSEFMX0kyU19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgogCiAgICAgICAgICAgRnVuY3Rpb24gSEFMX0kyU19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6Ci0gICAgICAgICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgIDogSTJTIFR4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrICAgICAgICA6IEkyUyBSeCBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBJMlMgVHggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBJMlMgUnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBJMlMgRXJyb3IgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgOiBJMlMgTXNwIEluaXQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgOiBJMlMgTXNwIERlSW5pdCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeENwbHRDYWxsYmFjayAgICAgICAgOiBJMlMgVHggQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFJ4Q3BsdENhbGxiYWNrICAgICAgICA6IEkyUyBSeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IEkyUyBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBJMlMgRXJyb3IgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogSTJTIE1zcCBJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IEkyUyBNc3AgRGVJbml0IGNhbGxiYWNrCiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICAgICAgICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKQEAgLTEzMSwxNCArMTMxLDE1IEBACiAgICAgICAgICAgSEFMX0kyU19VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICAgICAgICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAgICAgICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgOiBJMlMgVHggQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayAgICA6IEkyUyBUeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IEkyUyBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IEkyUyBFcnJvciBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICA6IEkyUyBNc3AgSW5pdCBjYWxsYmFjawotICAgICAgICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IEkyUyBNc3AgRGVJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IEkyUyBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBJMlMgVHggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IEkyUyBFcnJvciBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgOiBJMlMgTXNwIEluaXQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgIDogSTJTIE1zcCBEZUluaXQgY2FsbGJhY2sKIAorICAgICAgIFsuLl0KICAgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0kyU19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9JMlNfU1RBVEVfUkVTRVQKICAgICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6CiAgICAgICAgZXhhbXBsZXMgSEFMX0kyU19NYXN0ZXJUeENwbHRDYWxsYmFjaygpLCBIQUxfSTJTX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkuCkBAIC0xNDgsNiArMTQ5LDcgQEAKICAgICAgICBJZiBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfSTJTX0luaXQoKS8gSEFMX0kyU19EZUluaXQoKQogICAgICAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkgd2hhdGV2ZXIgdGhlIHN0YXRlLgogCisgICAgICAgWy4uXQogICAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0kyU19TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICAgICAgIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAogICAgICAgIGluIEhBTF9JMlNfU1RBVEVfUkVBRFkgb3IgSEFMX0kyU19TVEFURV9SRVNFVCBzdGF0ZSwKQEAgLTE1Niw3ICsxNTgsOCBAQAogICAgICAgIHVzaW5nIEhBTF9JMlNfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEhBTF9JMlNfRGVJbml0KCkKICAgICAgICBvciBIQUxfSTJTX0luaXQoKSBmdW5jdGlvbi4KIAotICAgICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKKyAgICAgICBbLi5dCisgICAgICAgV2hlbiB0aGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCiAgICAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KIApAQCAtMTY0LDcgKzE2Nyw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfaXJkYS5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfaXJkYS5jCmluZGV4IGQ3NDQ3OTUuLmQxY2RhYTUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX2lyZGEuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9pcmRhLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTcxOCw2ICs3MTgsNyBAQAogICAgIFdoaWxlIHJlY2VpdmluZyBkYXRhLCB0cmFuc21pc3Npb24gc2hvdWxkIGJlIGF2b2lkZWQgYXMgdGhlIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQKICAgICBjb3VsZCBiZSBjb3JydXB0ZWQuCiAKKyAgWy4uXQogICAgICgjKSBUaGVyZSBhcmUgdHdvIG1vZGVzIG9mIHRyYW5zZmVyOgogICAgICAgICAoKyspIEJsb2NraW5nIG1vZGU6IHRoZSBjb21tdW5pY2F0aW9uIGlzIHBlcmZvcm1lZCBpbiBwb2xsaW5nIG1vZGUuCiAgICAgICAgICAgICAgVGhlIEhBTCBzdGF0dXMgb2YgYWxsIGRhdGEgcHJvY2Vzc2luZyBpcyByZXR1cm5lZCBieSB0aGUgc2FtZSBmdW5jdGlvbgpAQCAtNzU1LDI4ICs3NTYsMjggQEAKICAgICAgICAgKCsrKSBIQUxfSVJEQV9FcnJvckNhbGxiYWNrKCkKIAogICAgICgjKSBOb24tQmxvY2tpbmcgbW9kZSB0cmFuc2ZlcnMgY291bGQgYmUgYWJvcnRlZCB1c2luZyBBYm9ydCBBUEkncyA6Ci0gICAgICAgICgrKSBIQUxfSVJEQV9BYm9ydCgpCi0gICAgICAgICgrKSBIQUxfSVJEQV9BYm9ydFRyYW5zbWl0KCkKLSAgICAgICAgKCspIEhBTF9JUkRBX0Fib3J0UmVjZWl2ZSgpCi0gICAgICAgICgrKSBIQUxfSVJEQV9BYm9ydF9JVCgpCi0gICAgICAgICgrKSBIQUxfSVJEQV9BYm9ydFRyYW5zbWl0X0lUKCkKLSAgICAgICAgKCspIEhBTF9JUkRBX0Fib3J0UmVjZWl2ZV9JVCgpCisgICAgICAgICgrKykgSEFMX0lSREFfQWJvcnQoKQorICAgICAgICAoKyspIEhBTF9JUkRBX0Fib3J0VHJhbnNtaXQoKQorICAgICAgICAoKyspIEhBTF9JUkRBX0Fib3J0UmVjZWl2ZSgpCisgICAgICAgICgrKykgSEFMX0lSREFfQWJvcnRfSVQoKQorICAgICAgICAoKyspIEhBTF9JUkRBX0Fib3J0VHJhbnNtaXRfSVQoKQorICAgICAgICAoKyspIEhBTF9JUkRBX0Fib3J0UmVjZWl2ZV9JVCgpCiAKICAgICAoIykgRm9yIEFib3J0IHNlcnZpY2VzIGJhc2VkIG9uIGludGVycnVwdHMgKEhBTF9JUkRBX0Fib3J0eHh4X0lUKSwgYSBzZXQgb2YgQWJvcnQgQ29tcGxldGUgQ2FsbGJhY2tzIGFyZSBwcm92aWRlZDoKLSAgICAgICAgKCspIEhBTF9JUkRBX0Fib3J0Q3BsdENhbGxiYWNrKCkKLSAgICAgICAgKCspIEhBTF9JUkRBX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKQotICAgICAgICAoKykgSEFMX0lSREFfQWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrKCkKKyAgICAgICAgKCsrKSBIQUxfSVJEQV9BYm9ydENwbHRDYWxsYmFjaygpCisgICAgICAgICgrKykgSEFMX0lSREFfQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjaygpCisgICAgICAgICgrKykgSEFMX0lSREFfQWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrKCkKIAogICAgICgjKSBJbiBOb24tQmxvY2tpbmcgbW9kZSB0cmFuc2ZlcnMsIHBvc3NpYmxlIGVycm9ycyBhcmUgc3BsaXQgaW50byAyIGNhdGVnb3JpZXMuCiAgICAgICAgIEVycm9ycyBhcmUgaGFuZGxlZCBhcyBmb2xsb3dzIDoKLSAgICAgICAgKCspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgUmVjb3ZlcmFibGUgYW5kIG5vbiBibG9ja2luZyA6IFRyYW5zZmVyIGNvdWxkIGdvIHRpbGwgZW5kLCBidXQgZXJyb3Igc2V2ZXJpdHkgaXMKLSAgICAgICAgICAgIHRvIGJlIGV2YWx1YXRlZCBieSB1c2VyIDogdGhpcyBjb25jZXJucyBGcmFtZSBFcnJvciwgUGFyaXR5IEVycm9yIG9yIE5vaXNlIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiAuCi0gICAgICAgICAgICBSZWNlaXZlZCBjaGFyYWN0ZXIgaXMgdGhlbiByZXRyaWV2ZWQgYW5kIHN0b3JlZCBpbiBSeCBidWZmZXIsIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwKLSAgICAgICAgICAgIGFuZCBIQUxfSVJEQV9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4gVHJhbnNmZXIgaXMga2VwdCBvbmdvaW5nIG9uIElSREEgc2lkZS4KLSAgICAgICAgICAgIElmIHVzZXIgd2FudHMgdG8gYWJvcnQgaXQsIEFib3J0IHNlcnZpY2VzIHNob3VsZCBiZSBjYWxsZWQgYnkgdXNlci4KLSAgICAgICAgKCspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgQmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIHByb3Blcmx5IGFuZCBpcyBhYm9ydGVkLgotICAgICAgICAgICAgVGhpcyBjb25jZXJucyBPdmVycnVuIEVycm9yIEluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiBhbmQgYWxsIGVycm9ycyBpbiBETUEgbW9kZS4KLSAgICAgICAgICAgIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwgYW5kIEhBTF9JUkRBX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLgorICAgICAgICAoKyspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgUmVjb3ZlcmFibGUgYW5kIG5vbiBibG9ja2luZyA6IFRyYW5zZmVyIGNvdWxkIGdvIHRpbGwgZW5kLCBidXQgZXJyb3Igc2V2ZXJpdHkgaXMKKyAgICAgICAgICAgICB0byBiZSBldmFsdWF0ZWQgYnkgdXNlciA6IHRoaXMgY29uY2VybnMgRnJhbWUgRXJyb3IsIFBhcml0eSBFcnJvciBvciBOb2lzZSBFcnJvciBpbiBJbnRlcnJ1cHQgbW9kZSByZWNlcHRpb24gLgorICAgICAgICAgICAgIFJlY2VpdmVkIGNoYXJhY3RlciBpcyB0aGVuIHJldHJpZXZlZCBhbmQgc3RvcmVkIGluIFJ4IGJ1ZmZlciwgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeSBlcnJvciB0eXBlLAorICAgICAgICAgICAgIGFuZCBIQUxfSVJEQV9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4gVHJhbnNmZXIgaXMga2VwdCBvbmdvaW5nIG9uIElSREEgc2lkZS4KKyAgICAgICAgICAgICBJZiB1c2VyIHdhbnRzIHRvIGFib3J0IGl0LCBBYm9ydCBzZXJ2aWNlcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHVzZXIuCisgICAgICAgICgrKykgRXJyb3IgaXMgY29uc2lkZXJlZCBhcyBCbG9ja2luZyA6IFRyYW5zZmVyIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgcHJvcGVybHkgYW5kIGlzIGFib3J0ZWQuCisgICAgICAgICAgICAgVGhpcyBjb25jZXJucyBPdmVycnVuIEVycm9yIEluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiBhbmQgYWxsIGVycm9ycyBpbiBETUEgbW9kZS4KKyAgICAgICAgICAgICBFcnJvciBjb2RlIGlzIHNldCB0byBhbGxvdyB1c2VyIHRvIGlkZW50aWZ5IGVycm9yIHR5cGUsIGFuZCBIQUxfSVJEQV9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4KIAogQGVuZHZlcmJhdGltCiAgICogQHsKQEAgLTc4NCwxMCArNzg1LDEzIEBACiAKIC8qKgogICAqIEBicmllZiBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCisgICogQG5vdGUgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCByZWZsZWN0IHRoZSBudW1iZXIKKyAgKiAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBEYXRhLgogICAqIEBwYXJhbSBoaXJkYSBQb2ludGVyIHRvIGEgSVJEQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KLSAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSBzZW50LgorICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtIFNpemUgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgc2VudC4KICAgKiBAcGFyYW0gVGltZW91dCBTcGVjaWZ5IHRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC04NzAsMTAgKzg3NCwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlLgorICAqIEBub3RlICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IHJlZmxlY3QgdGhlIG51bWJlcgorICAqICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCiAgICogQHBhcmFtICBoaXJkYSBQb2ludGVyIHRvIGEgSVJEQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgSVJEQSBtb2R1bGUuCi0gICogQHBhcmFtIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCi0gICogQHBhcmFtIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQuCisgICogQHBhcmFtIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gU2l6ZSBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSByZWNlaXZlZC4KICAgKiBAcGFyYW0gVGltZW91dCBTcGVjaWZ5IHRpbWVvdXQgdmFsdWUuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC05NTgsMTAgKzk2NSwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgU2VuZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBpbnRlcnJ1cHQgbW9kZS4KKyAgKiBAbm90ZSAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IHJlZmxlY3QgdGhlIG51bWJlcgorICAqICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCiAgICogQHBhcmFtICBoaXJkYSBQb2ludGVyIHRvIGEgSVJEQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgSVJEQSBtb2R1bGUuCi0gICogQHBhcmFtIHBEYXRhIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCi0gICogQHBhcmFtIFNpemUgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudC4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSVJEQV9UcmFuc21pdF9JVChJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKQEAgLTEwMDAsMTAgKzEwMTAsMTMgQEAKIAogLyoqCiAgICogQGJyaWVmIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gaW50ZXJydXB0IG1vZGUuCisgICogQG5vdGUgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgcmVmbGVjdCB0aGUgbnVtYmVyCisgICogICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwRGF0YS4KICAgKiBAcGFyYW0gIGhpcmRhIFBvaW50ZXIgdG8gYSBJUkRBX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KLSAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZC4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0lSREFfUmVjZWl2ZV9JVChJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKQEAgLTEwNDksMTAgKzEwNjIsMTMgQEAKIAogLyoqCiAgICogQGJyaWVmIFNlbmQgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCisgICogQG5vdGUgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCByZWZsZWN0IHRoZSBudW1iZXIKKyAgKiAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBEYXRhLgogICAqIEBwYXJhbSBoaXJkYSBQb2ludGVyIHRvIGEgSVJEQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KLSAgKiBAcGFyYW0gcERhdGEgcG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSBhbW91bnQgb2YgZGF0YSB0byBiZSBzZW50LgorICAqIEBwYXJhbSBwRGF0YSBwb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtIFNpemUgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgc2VudC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JUkRBX1RyYW5zbWl0X0RNQShJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKQEAgLTExMjQsMTIgKzExNDAsMTUgQEAKIAogLyoqCiAgICogQGJyaWVmIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCisgICogQG5vdGUgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgcmVmbGVjdCB0aGUgbnVtYmVyCisgICogICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwRGF0YS4KICAgKiBAbm90ZSAgIFdoZW4gdGhlIElSREEgcGFyaXR5IGlzIGVuYWJsZWQgKFBDRSA9IDEpLCB0aGUgcmVjZWl2ZWQgZGF0YSBjb250YWlucwogICAqICAgICAgICAgdGhlIHBhcml0eSBiaXQgKE1TQiBwb3NpdGlvbikuCiAgICogQHBhcmFtIGhpcmRhIFBvaW50ZXIgdG8gYSBJUkRBX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgotICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSBTaXplIEFtb3VudCBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkLgorICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtIFNpemUgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgcmVjZWl2ZWQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSVJEQV9SZWNlaXZlX0RNQShJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKQEAgLTIyMTgsNiArMjIzNyw3IEBACiAgIElSREFfQ2xvY2tTb3VyY2VUeXBlRGVmIGNsb2Nrc291cmNlOwogICBIQUxfU3RhdHVzVHlwZURlZiByZXQgPSBIQUxfT0s7CiAgIGNvbnN0IHVpbnQxNl90IElSREFQcmVzY1RhYmxlWzEyXSA9IHsxVSwgMlUsIDRVLCA2VSwgOFUsIDEwVSwgMTJVLCAxNlUsIDMyVSwgNjRVLCAxMjhVLCAyNTZVfTsKKyAgdWludDMyX3QgcGNsazsKIAogICAvKiBDaGVjayB0aGUgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19JUkRBX0JBVURSQVRFKGhpcmRhLT5Jbml0LkJhdWRSYXRlKSk7CkBAIC0yMjQ2LDcgKzIyNjYsNyBAQAogICBNT0RJRllfUkVHKGhpcmRhLT5JbnN0YW5jZS0+UFJFU0MsIFVTQVJUX1BSRVNDX1BSRVNDQUxFUiwgaGlyZGEtPkluaXQuQ2xvY2tQcmVzY2FsZXIpOwogCiAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgR1RQUiBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICBNT0RJRllfUkVHKGhpcmRhLT5JbnN0YW5jZS0+R1RQUiwgKHVpbnQxNl90KVVTQVJUX0dUUFJfUFNDLCBoaXJkYS0+SW5pdC5QcmVzY2FsZXIpOworICBNT0RJRllfUkVHKGhpcmRhLT5JbnN0YW5jZS0+R1RQUiwgKHVpbnQxNl90KVVTQVJUX0dUUFJfUFNDLCAodWludDE2X3QpaGlyZGEtPkluaXQuUHJlc2NhbGVyKTsKIAogICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVTQVJUIEJSUiBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgSVJEQV9HRVRDTE9DS1NPVVJDRShoaXJkYSwgY2xvY2tzb3VyY2UpOwpAQCAtMjI1NCwxNiArMjI3NCwxOSBAQAogICBzd2l0Y2ggKGNsb2Nrc291cmNlKQogICB7CiAgICAgY2FzZSBJUkRBX0NMT0NLU09VUkNFX1BDTEsxOgotICAgICAgdG1wcmVnID0gKHVpbnQxNl90KShJUkRBX0RJVl9TQU1QTElORzE2KEhBTF9SQ0NfR2V0UENMSzFGcmVxKCksIGhpcmRhLT5Jbml0LkJhdWRSYXRlLCBoaXJkYS0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOworICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzFGcmVxKCk7CisgICAgICB0bXByZWcgPSAodWludDE2X3QpKElSREFfRElWX1NBTVBMSU5HMTYocGNsaywgaGlyZGEtPkluaXQuQmF1ZFJhdGUsIGhpcmRhLT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICBicmVhazsKICAgICBjYXNlIElSREFfQ0xPQ0tTT1VSQ0VfUENMSzI6Ci0gICAgICB0bXByZWcgPSAodWludDE2X3QpKElSREFfRElWX1NBTVBMSU5HMTYoSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKSwgaGlyZGEtPkluaXQuQmF1ZFJhdGUsIGhpcmRhLT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKTsKKyAgICAgIHRtcHJlZyA9ICh1aW50MTZfdCkoSVJEQV9ESVZfU0FNUExJTkcxNihwY2xrLCBoaXJkYS0+SW5pdC5CYXVkUmF0ZSwgaGlyZGEtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgSVJEQV9DTE9DS1NPVVJDRV9IU0k6CiAgICAgICB0bXByZWcgPSAodWludDE2X3QpKElSREFfRElWX1NBTVBMSU5HMTYoSFNJX1ZBTFVFLCBoaXJkYS0+SW5pdC5CYXVkUmF0ZSwgaGlyZGEtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgSVJEQV9DTE9DS1NPVVJDRV9TWVNDTEs6Ci0gICAgICB0bXByZWcgPSAodWludDE2X3QpKElSREFfRElWX1NBTVBMSU5HMTYoSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSwgaGlyZGEtPkluaXQuQmF1ZFJhdGUsIGhpcmRhLT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICBwY2xrID0gSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKTsKKyAgICAgIHRtcHJlZyA9ICh1aW50MTZfdCkoSVJEQV9ESVZfU0FNUExJTkcxNihwY2xrLCBoaXJkYS0+SW5pdC5CYXVkUmF0ZSwgaGlyZGEtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgSVJEQV9DTE9DS1NPVVJDRV9MU0U6CiAgICAgICB0bXByZWcgPSAodWludDE2X3QpKElSREFfRElWX1NBTVBMSU5HMTYoKHVpbnQzMl90KUxTRV9WQUxVRSwgaGlyZGEtPkluaXQuQmF1ZFJhdGUsIGhpcmRhLT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9pd2RnLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9pd2RnLmMKaW5kZXggNzZkNzFhMy4uMzhmZTcyZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfaXdkZy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX2l3ZGcuYwpAQCAtNDgsMTkgKzQ4LDE5IEBACiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBbLi5dCiAgICAgKCMpIFVzZSBJV0RHIHVzaW5nIEhBTF9JV0RHX0luaXQoKSBmdW5jdGlvbiB0byA6Ci0gICAgICAoKykgRW5hYmxlIGluc3RhbmNlIGJ5IHdyaXRpbmcgU3RhcnQga2V5d29yZCBpbiBJV0RHX0tFWSByZWdpc3Rlci4gTFNJCisgICAgICAoKyspIEVuYWJsZSBpbnN0YW5jZSBieSB3cml0aW5nIFN0YXJ0IGtleXdvcmQgaW4gSVdER19LRVkgcmVnaXN0ZXIuIExTSQogICAgICAgICAgICBjbG9jayBpcyBmb3JjZWQgT04gYW5kIElXREcgY291bnRlciBzdGFydHMgY291bnRpbmcgZG93bi4KLSAgICAgICgrKSBFbmFibGUgd3JpdGUgYWNjZXNzIHRvIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzOgorICAgICAgKCsrKSBFbmFibGUgd3JpdGUgYWNjZXNzIHRvIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzOgogICAgICAgICAgIElXREdfUFIsIElXREdfUkxSIGFuZCBJV0RHX1dJTlIuCi0gICAgICAoKykgQ29uZmlndXJlIHRoZSBJV0RHIHByZXNjYWxlciBhbmQgY291bnRlciByZWxvYWQgdmFsdWUuIFRoaXMgcmVsb2FkCisgICAgICAoKyspIENvbmZpZ3VyZSB0aGUgSVdERyBwcmVzY2FsZXIgYW5kIGNvdW50ZXIgcmVsb2FkIHZhbHVlLiBUaGlzIHJlbG9hZAogICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIGxvYWRlZCBpbiB0aGUgSVdERyBjb3VudGVyIGVhY2ggdGltZSB0aGUgd2F0Y2hkb2cgaXMKICAgICAgICAgICAgcmVsb2FkZWQsIHRoZW4gdGhlIElXREcgd2lsbCBzdGFydCBjb3VudGluZyBkb3duIGZyb20gdGhpcyB2YWx1ZS4KLSAgICAgICgrKSBXYWl0IGZvciBzdGF0dXMgZmxhZ3MgdG8gYmUgcmVzZXQuCi0gICAgICAoKykgRGVwZW5kaW5nIG9uIHdpbmRvdyBwYXJhbWV0ZXI6Ci0gICAgICAgICgrKykgSWYgV2luZG93IEluaXQgcGFyYW1ldGVyIGlzIHNhbWUgYXMgV2luZG93IHJlZ2lzdGVyIHZhbHVlLAorICAgICAgKCsrKSBXYWl0IGZvciBzdGF0dXMgZmxhZ3MgdG8gYmUgcmVzZXQuCisgICAgICAoKyspIERlcGVuZGluZyBvbiB3aW5kb3cgcGFyYW1ldGVyOgorICAgICAgICAoKysrKSBJZiBXaW5kb3cgSW5pdCBwYXJhbWV0ZXIgaXMgc2FtZSBhcyBXaW5kb3cgcmVnaXN0ZXIgdmFsdWUsCiAgICAgICAgICAgICAgbm90aGluZyBtb3JlIGlzIGRvbmUgYnV0IHJlbG9hZCBjb3VudGVyIHZhbHVlIGluIG9yZGVyIHRvIGV4aXQKICAgICAgICAgICAgICBmdW5jdGlvbiB3aXRoIGV4YWN0IHRpbWUgYmFzZS4KLSAgICAgICAgKCsrKSBFbHNlIG1vZGlmeSBXaW5kb3cgcmVnaXN0ZXIuIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IHJlbG9hZAorICAgICAgICAoKysrKSBFbHNlIG1vZGlmeSBXaW5kb3cgcmVnaXN0ZXIuIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IHJlbG9hZAogICAgICAgICAgICAgIHdhdGNoZG9nIGNvdW50ZXIuCiAKICAgICAoIykgVGhlbiB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbSBtdXN0IHJlZnJlc2ggdGhlIElXREcgY291bnRlciBhdCByZWd1bGFyCkBAIC03OSw3ICs3OSw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtMTI2LDggKzEyNiw4IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBJV0RHX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKLSAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIFN0YXJ0IGZ1bmN0aW9ucy4KLSAqCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgU3RhcnQgZnVuY3Rpb25zLgorICAqCiBAdmVyYmF0aW0KICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgIyMjIyMgSW5pdGlhbGl6YXRpb24gYW5kIFN0YXJ0IGZ1bmN0aW9ucyAjIyMjIwpAQCAtMjE1LDggKzIxNSw4IEBACiAKIAogLyoqIEBhZGR0b2dyb3VwIElXREdfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMgotICogIEBicmllZiAgIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAqCisgICogIEBicmllZiAgIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX2xwdGltLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9scHRpbS5jCmluZGV4IGI2MDg1MjkuLmQ1MTUzOWQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX2xwdGltLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfbHB0aW0uYwpAQCAtOTIsMTkgKzkyLDE5IEBACiAKICAgICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQorICBbLi5dCiAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfTFBUSU1fUkVHSVNURVJfQ0FMTEJBQ0tTIHdoZW4gc2V0IHRvIDEKICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KLQorICBbLi5dCiAgIFVzZSBGdW5jdGlvbiBAcmVmIEhBTF9MUFRJTV9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjay4KICAgQHJlZiBIQUxfTFBUSU1fUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKICAgdGhlIENhbGxiYWNrIElEIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCi0KKyAgWy4uXQogICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfTFBUSU1fVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUKICAgZGVmYXVsdCB3ZWFrIGZ1bmN0aW9uLgogICBAcmVmIEhBTF9MUFRJTV9VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICBhbmQgdGhlIENhbGxiYWNrIElELgotCisgIFsuLl0KICAgVGhlc2UgZnVuY3Rpb25zIGFsbG93IHRvIHJlZ2lzdGVyL3VucmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKIAogICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICA6IExQVElNIEJhc2UgTXNwIEluaXQgQ2FsbGJhY2suCkBAIC0xMTcsMTUgKzExNywxOCBAQAogICAgICgrKSBEaXJlY3Rpb25VcENhbGxiYWNrICAgICA6IFVwLWNvdW50aW5nIGRpcmVjdGlvbiBjaGFuZ2UgQ2FsbGJhY2suCiAgICAgKCspIERpcmVjdGlvbkRvd25DYWxsYmFjayAgIDogRG93bi1jb3VudGluZyBkaXJlY3Rpb24gY2hhbmdlIENhbGxiYWNrLgogCisgIFsuLl0KICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEluaXQgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9MUFRJTV9TVEFURV9SRVNFVAogICBhbGwgaW50ZXJydXB0IGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgogICBleGFtcGxlcyBAcmVmIEhBTF9MUFRJTV9UcmlnZ2VyQ2FsbGJhY2soKSwgQHJlZiBIQUxfTFBUSU1fQ29tcGFyZU1hdGNoQ2FsbGJhY2soKS4KIAorICBbLi5dCiAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhawogICBmdW5jdGlvbmFsaXRpZXMgaW4gdGhlIEluaXQvRGVJbml0IG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwKICAgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLiBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEluaXQvRGVJbml0CiAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKIAorICBbLi5dCiAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0xQVElNX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCiAgIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCiAgIGluIEhBTF9MUFRJTV9TVEFURV9SRUFEWSBvciBIQUxfTFBUSU1fU1RBVEVfUkVTRVQgc3RhdGUsCkBAIC0xMzMsNiArMTM2LDcgQEAKICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwogICB1c2luZyBAcmVmIEhBTF9MUFRJTV9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgRGVJbml0IG9yIEluaXQgZnVuY3Rpb24uCiAKKyAgWy4uXQogICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCiAgIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCkBAIC0xNDEsNyArMTQ1LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX21zcF90ZW1wbGF0ZS5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfbXNwX3RlbXBsYXRlLmMKaW5kZXggNjM2MTQzMS4uNzM2NjhiZiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfbXNwX3RlbXBsYXRlLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfbXNwX3RlbXBsYXRlLmMKQEAgLTgsNyArOCw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfbmFuZC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfbmFuZC5jCmluZGV4IDQxZjc4ZmUuLjZjZjFlMjEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX25hbmQuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9uYW5kLmMKQEAgLTk1LDcgKzk1LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9ub3IuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX25vci5jCmluZGV4IGYxYTA4NzUuLmJjZjdkZjAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX25vci5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX25vci5jCkBAIC05Miw3ICs5Miw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfb3BhbXAuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX29wYW1wLmMKaW5kZXggOWQxMmRlNS4uZDc3ZDRhMCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfb3BhbXAuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9vcGFtcC5jCkBAIC0xNjksNyArMTY5LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9vcGFtcF9leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfb3BhbXBfZXguYwppbmRleCA1OTQ4MjE5Li4wMmMzOTg0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9vcGFtcF9leC5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX29wYW1wX2V4LmMKQEAgLTE0LDcgKzE0LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC04Miw3ICs4Miw3IEBACiAgICogQG5vdGUgICBDYWxpYnJhdGlvbiBydW5zIGFib3V0IDI1IG1zLgogICAqLwogCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KQogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX09QQU1QRXhfU2VsZkNhbGlicmF0ZUFsbChPUEFNUF9IYW5kbGVUeXBlRGVmICpob3BhbXAxLCBPUEFNUF9IYW5kbGVUeXBlRGVmICpob3BhbXAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUEFNUF9IYW5kbGVUeXBlRGVmICpob3BhbXAzLCBPUEFNUF9IYW5kbGVUeXBlRGVmICpob3BhbXA0LCBPUEFNUF9IYW5kbGVUeXBlRGVmICpob3BhbXA1LCBPUEFNUF9IYW5kbGVUeXBlRGVmICpob3BhbXA2KQogI2VsaWYgZGVmaW5lZChTVE0zMkdCSzFDQikgfHwgZGVmaW5lZChTVE0zMkc0MzF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NDF4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzF4eCkKQEAgLTk2LDcgKzk2LDcgQEAKICAgdWludDMyX3QgdHJpbW1pbmd2YWx1ZXAyOwogICB1aW50MzJfdCB0cmltbWluZ3ZhbHVlbjM7CiAgIHVpbnQzMl90IHRyaW1taW5ndmFsdWVwMzsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgIHVpbnQzMl90IHRyaW1taW5ndmFsdWVuNDsKICAgdWludDMyX3QgdHJpbW1pbmd2YWx1ZXA0OwogICB1aW50MzJfdCB0cmltbWluZ3ZhbHVlbjU7CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgdWludDMyX3QgZGVsdGE7CiAKICAgaWYgKChob3BhbXAxID09IE5VTEwpIHx8IChob3BhbXAyID09IE5VTEwpIHx8IChob3BhbXAzID09IE5VTEwpCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgICAgfHwgKGhvcGFtcDQgPT0gTlVMTCkgfHwgKGhvcGFtcDUgPT0gTlVMTCkgfHwgKGhvcGFtcDYgPT0gTlVMTCkKICNlbmRpZgogICAgICApCkBAIC0xMjcsNyArMTI3LDcgQEAKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgIGVsc2UgaWYgKGhvcGFtcDQtPlN0YXRlICE9IEhBTF9PUEFNUF9TVEFURV9SRUFEWSkKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICBhc3NlcnRfcGFyYW0oSVNfT1BBTVBfQUxMX0lOU1RBTkNFKGhvcGFtcDEtPkluc3RhbmNlKSk7CiAgICAgYXNzZXJ0X3BhcmFtKElTX09QQU1QX0FMTF9JTlNUQU5DRShob3BhbXAyLT5JbnN0YW5jZSkpOwogICAgIGFzc2VydF9wYXJhbShJU19PUEFNUF9BTExfSU5TVEFOQ0UoaG9wYW1wMy0+SW5zdGFuY2UpKTsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgYXNzZXJ0X3BhcmFtKElTX09QQU1QX0FMTF9JTlNUQU5DRShob3BhbXA0LT5JbnN0YW5jZSkpOwogICAgIGFzc2VydF9wYXJhbShJU19PUEFNUF9BTExfSU5TVEFOQ0UoaG9wYW1wNS0+SW5zdGFuY2UpKTsKICAgICBhc3NlcnRfcGFyYW0oSVNfT1BBTVBfQUxMX0lOU1RBTkNFKGhvcGFtcDYtPkluc3RhbmNlKSk7CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICBTRVRfQklUKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9GT1JDRVZQKTsKICAgICBTRVRfQklUKGhvcGFtcDItPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9GT1JDRVZQKTsKICAgICBTRVRfQklUKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9GT1JDRVZQKTsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgU0VUX0JJVChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfRk9SQ0VWUCk7CiAgICAgU0VUX0JJVChob3BhbXA1LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfRk9SQ0VWUCk7CiAgICAgU0VUX0JJVChob3BhbXA2LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfRk9SQ0VWUCk7CkBAIC0xNjksNyArMTY5LDcgQEAKICAgICBTRVRfQklUKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9VU0VSVFJJTSk7CiAgICAgU0VUX0JJVChob3BhbXAyLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVVNFUlRSSU0pOwogICAgIFNFVF9CSVQoaG9wYW1wMy0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1VTRVJUUklNKTsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgU0VUX0JJVChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVVNFUlRSSU0pOwogICAgIFNFVF9CSVQoaG9wYW1wNS0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1VTRVJUUklNKTsKICAgICBTRVRfQklUKGhvcGFtcDYtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9VU0VSVFJJTSk7CkBAIC0xNzksNyArMTc5LDcgQEAKICAgICBTRVRfQklUKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxPTik7CiAgICAgU0VUX0JJVChob3BhbXAyLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMT04pOwogICAgIFNFVF9CSVQoaG9wYW1wMy0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX0NBTE9OKTsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgU0VUX0JJVChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMT04pOwogICAgIFNFVF9CSVQoaG9wYW1wNS0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX0NBTE9OKTsKICAgICBTRVRfQklUKGhvcGFtcDYtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxPTik7CkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICBNT0RJRllfUkVHKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxTRUwsIE9QQU1QX1ZSRUZfOTBWRERBKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDItPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxTRUwsIE9QQU1QX1ZSRUZfOTBWRERBKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxTRUwsIE9QQU1QX1ZSRUZfOTBWRERBKTsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgTU9ESUZZX1JFRyhob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMU0VMLCBPUEFNUF9WUkVGXzkwVkREQSk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXA1LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMU0VMLCBPUEFNUF9WUkVGXzkwVkREQSk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXA2LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMU0VMLCBPUEFNUF9WUkVGXzkwVkREQSk7CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICBTRVRfQklUKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9PUEFNUHhFTik7CiAgICAgU0VUX0JJVChob3BhbXAyLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfT1BBTVB4RU4pOwogICAgIFNFVF9CSVQoaG9wYW1wMy0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX09QQU1QeEVOKTsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgU0VUX0JJVChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfT1BBTVB4RU4pOwogICAgIFNFVF9CSVQoaG9wYW1wNS0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX09QQU1QeEVOKTsKICAgICBTRVRfQklUKGhvcGFtcDYtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9PUEFNUHhFTik7CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICB0cmltbWluZ3ZhbHVlbjEgPSAxNlVMOwogICAgIHRyaW1taW5ndmFsdWVuMiA9IDE2VUw7CiAgICAgdHJpbW1pbmd2YWx1ZW4zID0gMTZVTDsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgdHJpbW1pbmd2YWx1ZW40ID0gMTZVTDsKICAgICB0cmltbWluZ3ZhbHVlbjUgPSAxNlVMOwogICAgIHRyaW1taW5ndmFsdWVuNiA9IDE2VUw7CkBAIC0yMjQsNyArMjI0LDcgQEAKICAgICAgIE1PRElGWV9SRUcoaG9wYW1wMS0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVROLCB0cmltbWluZ3ZhbHVlbjEgPDwgT1BBTVBfSU5QVVRfSU5WRVJUSU5HKTsKICAgICAgIE1PRElGWV9SRUcoaG9wYW1wMi0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVROLCB0cmltbWluZ3ZhbHVlbjIgPDwgT1BBTVBfSU5QVVRfSU5WRVJUSU5HKTsKICAgICAgIE1PRElGWV9SRUcoaG9wYW1wMy0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVROLCB0cmltbWluZ3ZhbHVlbjMgPDwgT1BBTVBfSU5QVVRfSU5WRVJUSU5HKTsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgICBNT0RJRllfUkVHKGhvcGFtcDQtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW40IDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7CiAgICAgICBNT0RJRllfUkVHKGhvcGFtcDUtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW41IDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7CiAgICAgICBNT0RJRllfUkVHKGhvcGFtcDYtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW42IDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7CkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICAgICAgdHJpbW1pbmd2YWx1ZW4zIC09IGRlbHRhOwogICAgICAgfQogCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgICAgaWYgKChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSICYgT1BBTVBfQ1NSX09VVENBTCkgIT0gMFVMKQogICAgICAgewogICAgICAgICAvKiBPUEFNUF9DU1JfT1VUQ0FMIGlzIEhJR0ggdHJ5IGhpZ2hlciB0cmltbWluZyAqLwpAQCAtMzExLDcgKzMxMSw3IEBACiAgICAgTU9ESUZZX1JFRyhob3BhbXAxLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVE4sIHRyaW1taW5ndmFsdWVuMSA8PCBPUEFNUF9JTlBVVF9JTlZFUlRJTkcpOwogICAgIE1PRElGWV9SRUcoaG9wYW1wMi0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVROLCB0cmltbWluZ3ZhbHVlbjIgPDwgT1BBTVBfSU5QVVRfSU5WRVJUSU5HKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW4zIDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIE1PRElGWV9SRUcoaG9wYW1wNC0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVROLCB0cmltbWluZ3ZhbHVlbjQgPDwgT1BBTVBfSU5QVVRfSU5WRVJUSU5HKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDUtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW41IDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXA2LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVE4sIHRyaW1taW5ndmFsdWVuNiA8PCBPUEFNUF9JTlBVVF9JTlZFUlRJTkcpOwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAgICAgICBNT0RJRllfUkVHKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW4zIDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7CiAgICAgfQogCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIGlmICgoaG9wYW1wNC0+SW5zdGFuY2UtPkNTUiAmIE9QQU1QX0NTUl9PVVRDQUwpICE9IDBVTCkKICAgICB7CiAgICAgICAvKiBPUEFNUF9DU1JfT1VUQ0FMIGlzIGFjdHVhbGx5IG9uZSB2YWx1ZSBtb3JlICovCkBAIC0zNzcsNyArMzc3LDcgQEAKICAgICBNT0RJRllfUkVHKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxTRUwsIE9QQU1QX1ZSRUZfMTBWRERBKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDItPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxTRUwsIE9QQU1QX1ZSRUZfMTBWRERBKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxTRUwsIE9QQU1QX1ZSRUZfMTBWRERBKTsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgTU9ESUZZX1JFRyhob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMU0VMLCBPUEFNUF9WUkVGXzEwVkREQSk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXA1LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMU0VMLCBPUEFNUF9WUkVGXzEwVkREQSk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXA2LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMU0VMLCBPUEFNUF9WUkVGXzEwVkREQSk7CkBAIC0zODgsNyArMzg4LDcgQEAKICAgICB0cmltbWluZ3ZhbHVlcDEgPSAxNlVMOwogICAgIHRyaW1taW5ndmFsdWVwMiA9IDE2VUw7CiAgICAgdHJpbW1pbmd2YWx1ZXAzID0gMTZVTDsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgdHJpbW1pbmd2YWx1ZXA0ID0gMTZVTDsKICAgICB0cmltbWluZ3ZhbHVlcDUgPSAxNlVMOwogICAgIHRyaW1taW5ndmFsdWVwNiA9IDE2VUw7CkBAIC00MDIsNyArNDAyLDcgQEAKICAgICAgIE1PRElGWV9SRUcoaG9wYW1wMS0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVRQLCB0cmltbWluZ3ZhbHVlcDEgPDwgT1BBTVBfSU5QVVRfTk9OSU5WRVJUSU5HKTsKICAgICAgIE1PRElGWV9SRUcoaG9wYW1wMi0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVRQLCB0cmltbWluZ3ZhbHVlcDIgPDwgT1BBTVBfSU5QVVRfTk9OSU5WRVJUSU5HKTsKICAgICAgIE1PRElGWV9SRUcoaG9wYW1wMy0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVRQLCB0cmltbWluZ3ZhbHVlcDMgPDwgT1BBTVBfSU5QVVRfTk9OSU5WRVJUSU5HKTsKLSNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2lmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAgICAgICBNT0RJRllfUkVHKGhvcGFtcDQtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUUCwgdHJpbW1pbmd2YWx1ZXA0IDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7CiAgICAgICBNT0RJRllfUkVHKGhvcGFtcDUtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUUCwgdHJpbW1pbmd2YWx1ZXA1IDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7CiAgICAgICBNT0RJRllfUkVHKGhvcGFtcDYtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUUCwgdHJpbW1pbmd2YWx1ZXA2IDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7CkBAIC00NDMsNyArNDQzLDcgQEAKICAgICAgICAgdHJpbW1pbmd2YWx1ZXAzIC09IGRlbHRhOwogICAgICAgfQogCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgICAgaWYgKChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSICYgT1BBTVBfQ1NSX09VVENBTCkgIT0gMFVMKQogICAgICAgewogICAgICAgICAvKiBPUEFNUF9DU1JfT1VUQ0FMIGlzIEhJR0ggdHJ5IGhpZ2hlciB0cmltbWluZyAqLwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICAgTU9ESUZZX1JFRyhob3BhbXAxLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVFAsIHRyaW1taW5ndmFsdWVwMSA8PCBPUEFNUF9JTlBVVF9OT05JTlZFUlRJTkcpOwogICAgIE1PRElGWV9SRUcoaG9wYW1wMi0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVRQLCB0cmltbWluZ3ZhbHVlcDIgPDwgT1BBTVBfSU5QVVRfTk9OSU5WRVJUSU5HKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUUCwgdHJpbW1pbmd2YWx1ZXAzIDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIE1PRElGWV9SRUcoaG9wYW1wNC0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVRQLCB0cmltbWluZ3ZhbHVlcDQgPDwgT1BBTVBfSU5QVVRfTk9OSU5WRVJUSU5HKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDUtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUUCwgdHJpbW1pbmd2YWx1ZXA1IDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXA2LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVFAsIHRyaW1taW5ndmFsdWVwNiA8PCBPUEFNUF9JTlBVVF9OT05JTlZFUlRJTkcpOwpAQCAtNTE5LDcgKzUxOSw3IEBACiAgICAgICBNT0RJRllfUkVHKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUUCwgdHJpbW1pbmd2YWx1ZXAzIDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7CiAgICAgfQogCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIGlmICgoaG9wYW1wNC0+SW5zdGFuY2UtPkNTUiAmIE9QQU1QX0NTUl9PVVRDQUwpICE9IDBVTCkKICAgICB7CiAgICAgICAvKiBUcmltbWluZyB2YWx1ZSBpcyBhY3R1YWxseSBvbmUgdmFsdWUgbW9yZSAqLwpAQCAtNTQ5LDcgKzU0OSw3IEBACiAgICAgQ0xFQVJfQklUKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxPTik7CiAgICAgQ0xFQVJfQklUKGhvcGFtcDItPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxPTik7CiAgICAgQ0xFQVJfQklUKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9DQUxPTik7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIENMRUFSX0JJVChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMT04pOwogICAgIENMRUFSX0JJVChob3BhbXA1LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMT04pOwogICAgIENMRUFSX0JJVChob3BhbXA2LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfQ0FMT04pOwpAQCAtNTU5LDcgKzU1OSw3IEBACiAgICAgQ0xFQVJfQklUKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9PUEFNUHhFTik7CiAgICAgQ0xFQVJfQklUKGhvcGFtcDItPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9PUEFNUHhFTik7CiAgICAgQ0xFQVJfQklUKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9PUEFNUHhFTik7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIENMRUFSX0JJVChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfT1BBTVB4RU4pOwogICAgIENMRUFSX0JJVChob3BhbXA1LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfT1BBTVB4RU4pOwogICAgIENMRUFSX0JJVChob3BhbXA2LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfT1BBTVB4RU4pOwpAQCAtNTY5LDcgKzU2OSw3IEBACiAgICAgQ0xFQVJfQklUKGhvcGFtcDEtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9GT1JDRVZQKTsKICAgICBDTEVBUl9CSVQoaG9wYW1wMi0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX0ZPUkNFVlApOwogICAgIENMRUFSX0JJVChob3BhbXAzLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfRk9SQ0VWUCk7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIENMRUFSX0JJVChob3BhbXA0LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfRk9SQ0VWUCk7CiAgICAgQ0xFQVJfQklUKGhvcGFtcDUtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9GT1JDRVZQKTsKICAgICBDTEVBUl9CSVQoaG9wYW1wNi0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX0ZPUkNFVlApOwpAQCAtNTgzLDcgKzU4Myw3IEBACiAgICAgaG9wYW1wMS0+SW5pdC5UcmltbWluZ1ZhbHVlTiA9IHRyaW1taW5ndmFsdWVuMTsKICAgICBob3BhbXAyLT5Jbml0LlRyaW1taW5nVmFsdWVOID0gdHJpbW1pbmd2YWx1ZW4yOwogICAgIGhvcGFtcDMtPkluaXQuVHJpbW1pbmdWYWx1ZU4gPSB0cmltbWluZ3ZhbHVlbjM7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIGhvcGFtcDQtPkluaXQuVHJpbW1pbmdWYWx1ZU4gPSB0cmltbWluZ3ZhbHVlbjQ7CiAgICAgaG9wYW1wNS0+SW5pdC5UcmltbWluZ1ZhbHVlTiA9IHRyaW1taW5ndmFsdWVuNTsKICAgICBob3BhbXA2LT5Jbml0LlRyaW1taW5nVmFsdWVOID0gdHJpbW1pbmd2YWx1ZW42OwpAQCAtNTkzLDcgKzU5Myw3IEBACiAgICAgaG9wYW1wMS0+SW5pdC5UcmltbWluZ1ZhbHVlUCA9IHRyaW1taW5ndmFsdWVwMTsKICAgICBob3BhbXAyLT5Jbml0LlRyaW1taW5nVmFsdWVQID0gdHJpbW1pbmd2YWx1ZXAyOwogICAgIGhvcGFtcDMtPkluaXQuVHJpbW1pbmdWYWx1ZVAgPSB0cmltbWluZ3ZhbHVlcDM7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIGhvcGFtcDQtPkluaXQuVHJpbW1pbmdWYWx1ZVAgPSB0cmltbWluZ3ZhbHVlcDQ7CiAgICAgaG9wYW1wNS0+SW5pdC5UcmltbWluZ1ZhbHVlUCA9IHRyaW1taW5ndmFsdWVwNTsKICAgICBob3BhbXA2LT5Jbml0LlRyaW1taW5nVmFsdWVQID0gdHJpbW1pbmd2YWx1ZXA2OwpAQCAtNjA0LDcgKzYwNCw3IEBACiAgICAgaG9wYW1wMS0+SW5pdC5Vc2VyVHJpbW1pbmcgPSBPUEFNUF9UUklNTUlOR19VU0VSOwogICAgIGhvcGFtcDItPkluaXQuVXNlclRyaW1taW5nID0gT1BBTVBfVFJJTU1JTkdfVVNFUjsKICAgICBob3BhbXAzLT5Jbml0LlVzZXJUcmltbWluZyA9IE9QQU1QX1RSSU1NSU5HX1VTRVI7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIGhvcGFtcDQtPkluaXQuVXNlclRyaW1taW5nID0gT1BBTVBfVFJJTU1JTkdfVVNFUjsKICAgICBob3BhbXA1LT5Jbml0LlVzZXJUcmltbWluZyA9IE9QQU1QX1RSSU1NSU5HX1VTRVI7CiAgICAgaG9wYW1wNi0+SW5pdC5Vc2VyVHJpbW1pbmcgPSBPUEFNUF9UUklNTUlOR19VU0VSOwpAQCAtNjEzLDcgKzYxMyw3IEBACiAgICAgTU9ESUZZX1JFRyhob3BhbXAxLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVE4sIHRyaW1taW5ndmFsdWVuMSA8PCBPUEFNUF9JTlBVVF9JTlZFUlRJTkcpOwogICAgIE1PRElGWV9SRUcoaG9wYW1wMi0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVROLCB0cmltbWluZ3ZhbHVlbjIgPDwgT1BBTVBfSU5QVVRfSU5WRVJUSU5HKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW4zIDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIE1PRElGWV9SRUcoaG9wYW1wNC0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVROLCB0cmltbWluZ3ZhbHVlbjQgPDwgT1BBTVBfSU5QVVRfSU5WRVJUSU5HKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDUtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUTiwgdHJpbW1pbmd2YWx1ZW41IDw8IE9QQU1QX0lOUFVUX0lOVkVSVElORyk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXA2LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVE4sIHRyaW1taW5ndmFsdWVuNiA8PCBPUEFNUF9JTlBVVF9JTlZFUlRJTkcpOwpAQCAtNjIyLDcgKzYyMiw3IEBACiAgICAgTU9ESUZZX1JFRyhob3BhbXAxLT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVFAsIHRyaW1taW5ndmFsdWVwMSA8PCBPUEFNUF9JTlBVVF9OT05JTlZFUlRJTkcpOwogICAgIE1PRElGWV9SRUcoaG9wYW1wMi0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVRQLCB0cmltbWluZ3ZhbHVlcDIgPDwgT1BBTVBfSU5QVVRfTk9OSU5WRVJUSU5HKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDMtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUUCwgdHJpbW1pbmd2YWx1ZXAzIDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7Ci0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogICAgIE1PRElGWV9SRUcoaG9wYW1wNC0+SW5zdGFuY2UtPkNTUiwgT1BBTVBfQ1NSX1RSSU1PRkZTRVRQLCB0cmltbWluZ3ZhbHVlcDQgPDwgT1BBTVBfSU5QVVRfTk9OSU5WRVJUSU5HKTsKICAgICBNT0RJRllfUkVHKGhvcGFtcDUtPkluc3RhbmNlLT5DU1IsIE9QQU1QX0NTUl9UUklNT0ZGU0VUUCwgdHJpbW1pbmd2YWx1ZXAzIDw8IE9QQU1QX0lOUFVUX05PTklOVkVSVElORyk7CiAgICAgTU9ESUZZX1JFRyhob3BhbXA2LT5JbnN0YW5jZS0+Q1NSLCBPUEFNUF9DU1JfVFJJTU9GRlNFVFAsIHRyaW1taW5ndmFsdWVwNCA8PCBPUEFNUF9JTlBVVF9OT05JTlZFUlRJTkcpOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfcGNkLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9wY2QuYwppbmRleCBkNGUzZDJkLi5jNDM1YWM2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9wY2QuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9wY2QuYwpAQCAtNDIsNyArNDIsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTE3MTQsNyArMTcxNCwxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgLyogR2V0IFNFVFVQIFBhY2tldCovCiAgICAgICAgICAgZXAtPnhmZXJfY291bnQgPSBQQ0RfR0VUX0VQX1JYX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7Ci0gICAgICAgICAgVVNCX1JlYWRQTUEoaHBjZC0+SW5zdGFuY2UsICh1aW50OF90ICopaHBjZC0+U2V0dXAsIGVwLT5wbWFhZHJlc3MsICh1aW50MTZfdCllcC0+eGZlcl9jb3VudCk7CisKKyAgICAgICAgICBVU0JfUmVhZFBNQShocGNkLT5JbnN0YW5jZSwgKHVpbnQ4X3QgKilocGNkLT5TZXR1cCwKKyAgICAgICAgICAgICAgICAgICAgICBlcC0+cG1hYWRyZXNzLCAodWludDE2X3QpZXAtPnhmZXJfY291bnQpOworCiAgICAgICAgICAgLyogU0VUVVAgYml0IGtlcHQgZnJvemVuIHdoaWxlIENUUl9SWCA9IDEqLwogICAgICAgICAgIFBDRF9DTEVBUl9SWF9FUF9DVFIoaHBjZC0+SW5zdGFuY2UsIFBDRF9FTkRQMCk7CiAKQEAgLTE3MjksMjEgKzE3MzIsMjQgQEAKICAgICAgICAgZWxzZSBpZiAoKHdFUFZhbCAmIFVTQl9FUF9DVFJfUlgpICE9IDBVKQogICAgICAgICB7CiAgICAgICAgICAgUENEX0NMRUFSX1JYX0VQX0NUUihocGNkLT5JbnN0YW5jZSwgUENEX0VORFAwKTsKKwogICAgICAgICAgIC8qIEdldCBDb250cm9sIERhdGEgT1VUIFBhY2tldCovCiAgICAgICAgICAgZXAtPnhmZXJfY291bnQgPSBQQ0RfR0VUX0VQX1JYX0NOVChocGNkLT5JbnN0YW5jZSwgZXAtPm51bSk7CiAKLSAgICAgICAgICBpZiAoZXAtPnhmZXJfY291bnQgIT0gMFUpCisgICAgICAgICAgaWYgKChlcC0+eGZlcl9jb3VudCAhPSAwVSkgJiYgKGVwLT54ZmVyX2J1ZmYgIT0gMFUpKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIFVTQl9SZWFkUE1BKGhwY2QtPkluc3RhbmNlLCBlcC0+eGZlcl9idWZmLCBlcC0+cG1hYWRyZXNzLCAodWludDE2X3QpZXAtPnhmZXJfY291bnQpOwotICAgICAgICAgICAgZXAtPnhmZXJfYnVmZiArPSBlcC0+eGZlcl9jb3VudDsKLSAgICAgICAgICB9CisgICAgICAgICAgICBVU0JfUmVhZFBNQShocGNkLT5JbnN0YW5jZSwgZXAtPnhmZXJfYnVmZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVwLT5wbWFhZHJlc3MsICh1aW50MTZfdCllcC0+eGZlcl9jb3VudCk7CiAKLSAgICAgICAgICAvKiBQcm9jZXNzIENvbnRyb2wgRGF0YSBPVVQgUGFja2V0Ki8KKyAgICAgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gZXAtPnhmZXJfY291bnQ7CisKKyAgICAgICAgICAgIC8qIFByb2Nlc3MgQ29udHJvbCBEYXRhIE9VVCBQYWNrZXQqLwogI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICAgICAgaHBjZC0+RGF0YU91dFN0YWdlQ2FsbGJhY2soaHBjZCwgMFUpOworICAgICAgICAgICAgaHBjZC0+RGF0YU91dFN0YWdlQ2FsbGJhY2soaHBjZCwgMFUpOwogI2Vsc2UKLSAgICAgICAgICBIQUxfUENEX0RhdGFPdXRTdGFnZUNhbGxiYWNrKGhwY2QsIDBVKTsKKyAgICAgICAgICAgIEhBTF9QQ0RfRGF0YU91dFN0YWdlQ2FsbGJhY2soaHBjZCwgMFUpOwogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgICAgICAgIH0KIAogICAgICAgICAgIFBDRF9TRVRfRVBfUlhfQ05UKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDAsIGVwLT5tYXhwYWNrZXQpOwogICAgICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDAsIFVTQl9FUF9SWF9WQUxJRCk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9wY2RfZXguYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3BjZF9leC5jCmluZGV4IDI2NzY1ZjAuLjc0ZDUwYzAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX3BjZF9leC5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3BjZF9leC5jCkBAIC0xMCw3ICsxMCw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtMTI1LDYgKzEyNSw5IEBACiAgIFVTQl9UeXBlRGVmICpVU0J4ID0gaHBjZC0+SW5zdGFuY2U7CiAgIGhwY2QtPmJhdHRlcnlfY2hhcmdpbmdfYWN0aXZlID0gMVU7CiAKKyAgLyogRW5hYmxlIEJDRCBmZWF0dXJlICovCisgIFVTQngtPkJDRFIgfD0gVVNCX0JDRFJfQkNERU47CisKICAgLyogRW5hYmxlIERDRCA6IERhdGEgQ29udGFjdCBEZXRlY3QgKi8KICAgVVNCeC0+QkNEUiAmPSB+KFVTQl9CQ0RSX1BERU4pOwogICBVU0J4LT5CQ0RSICY9IH4oVVNCX0JDRFJfU0RFTik7CkBAIC0xNDMsNiArMTQ2LDcgQEAKICAgVVNCX1R5cGVEZWYgKlVTQnggPSBocGNkLT5JbnN0YW5jZTsKICAgaHBjZC0+YmF0dGVyeV9jaGFyZ2luZ19hY3RpdmUgPSAwVTsKIAorICAvKiBEaXNhYmxlIEJDRCBmZWF0dXJlICovCiAgIFVTQngtPkJDRFIgJj0gfihVU0JfQkNEUl9CQ0RFTik7CiAKICAgcmV0dXJuIEhBTF9PSzsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3B3ci5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfcHdyLmMKaW5kZXggZmRhYjc5NC4uNDliNTE5MCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfcHdyLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfcHdyLmMKQEAgLTExLDcgKzExLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9wd3JfZXguYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3B3cl9leC5jCmluZGV4IDg4MTFhNWIuLmZkZGY3ZmIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX3B3cl9leC5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3B3cl9leC5jCkBAIC0xMSw3ICsxMSw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNDAsNyArNDAsNyBAQAogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi0jaWYgZGVmaW5lZCAoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQgKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkIChTVE0zMkc0NzF4eCkgfHwgZGVmaW5lZCAoU1RNMzJHNDg0eHgpCisjaWYgZGVmaW5lZCAoU1RNMzJHNDcxeHgpIHx8IGRlZmluZWQgKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkIChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZCAoU1RNMzJHNDgzeHgpIHx8IGRlZmluZWQgKFNUTTMyRzQ4NHh4KQogI2RlZmluZSBQV1JfUE9SVEZfQVZBSUxBQkxFX1BJTlMgICAweDAwMDBGRkZGVSAvKiBQRjAuLlBGMTUgKi8KICNkZWZpbmUgUFdSX1BPUlRHX0FWQUlMQUJMRV9QSU5TICAgMHgwMDAwMDdGRlUgLyogUEcwLi5QRzEwICovCiAjZWxpZiBkZWZpbmVkIChTVE0zMkc0MzF4eCkgfHwgZGVmaW5lZCAoU1RNMzJHNDQxeHgpIHx8IGRlZmluZWQgKFNUTTMyR0JLMUNCKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfcXNwaS5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfcXNwaS5jCmluZGV4IGUzYjcwNWYuLjU5ZGMxZDkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX3FzcGkuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9xc3BpLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3JjYy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfcmNjLmMKaW5kZXggMjIxNzFlOC4uYTUxNWZlYyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfcmNjLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfcmNjLmMKQEAgLTM5LDcgKzM5LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0yNjMsNyArMjYzLDcgQEAKICAgU3lzdGVtQ29yZUNsb2NrID0gSFNJX1ZBTFVFOwogCiAgIC8qIEFkYXB0IFN5c3RpY2sgaW50ZXJydXB0IHBlcmlvZCAqLwotICBpZiAoSEFMX0luaXRUaWNrKFRJQ0tfSU5UX1BSSU9SSVRZKSAhPSBIQUxfT0spCisgIGlmIChIQUxfSW5pdFRpY2sodXdUaWNrUHJpbykgIT0gSEFMX09LKQogICB7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQpAQCAtNDA3LDcgKzQwNyw3IEBACiAgICAgICAgIF9fSEFMX1JDQ19IU0lfQ0FMSUJSQVRJT05WQUxVRV9BREpVU1QoUkNDX09zY0luaXRTdHJ1Y3QtPkhTSUNhbGlicmF0aW9uVmFsdWUpOwogCiAgICAgICAgIC8qIEFkYXB0IFN5c3RpY2sgaW50ZXJydXB0IHBlcmlvZCAqLwotICAgICAgICBpZiAoSEFMX0luaXRUaWNrKFRJQ0tfSU5UX1BSSU9SSVRZKSAhPSBIQUxfT0spCisgICAgICAgIGlmIChIQUxfSW5pdFRpY2sodXdUaWNrUHJpbykgIT0gSEFMX09LKQogICAgICAgICB7CiAgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgICAgfQpAQCAtOTQzLDcgKzk0Myw3IEBACiAgIFN5c3RlbUNvcmVDbG9jayA9IEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCkgPj4gKEFIQlByZXNjVGFibGVbUkVBRF9CSVQoUkNDLT5DRkdSLCBSQ0NfQ0ZHUl9IUFJFKSA+PiBSQ0NfQ0ZHUl9IUFJFX1Bvc10gJiAweDFGVSk7CiAKICAgLyogQ29uZmlndXJlIHRoZSBzb3VyY2Ugb2YgdGltZSBiYXNlIGNvbnNpZGVyaW5nIG5ldyBzeXN0ZW0gY2xvY2tzIHNldHRpbmdzKi8KLSAgcmV0dXJuIEhBTF9Jbml0VGljayhUSUNLX0lOVF9QUklPUklUWSk7CisgIHJldHVybiBIQUxfSW5pdFRpY2sodXdUaWNrUHJpbyk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfcmNjX2V4LmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9yY2NfZXguYwppbmRleCBiNjFkOTEyLi41NmY1NzA0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9yY2NfZXguYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9yY2NfZXguYwpAQCAtMTIsNyArMTIsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTQ5OSw3ICs0OTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19QRVJJUEhDTEtfUVNQSSAgICB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQ0NfUEVSSVBIQ0xLX1JUQzsKIAotI2VsaWYgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNlbGlmIGRlZmluZWQoU1RNMzJHNDczeHgpIHx8IGRlZmluZWQoU1RNMzJHNDgzeHgpCiAKICAgUGVyaXBoQ2xrSW5pdC0+UGVyaXBoQ2xvY2tTZWxlY3Rpb24gPSBSQ0NfUEVSSVBIQ0xLX1VTQVJUMSAgfCBSQ0NfUEVSSVBIQ0xLX1VTQVJUMiB8IFJDQ19QRVJJUEhDTEtfVVNBUlQzIHwgUkNDX1BFUklQSENMS19VQVJUNCAgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX1BFUklQSENMS19VQVJUNSAgIHwgXApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfcm5nLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9ybmcuYwppbmRleCBhYzg3YWJiLi41NjliMTY3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9ybmcuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9ybmcuYwpAQCAtODEsNyArODEsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTMwOCw3ICszMDgsNyBAQAogICBpZiAocENhbGxiYWNrID09IE5VTEwpCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICBocm5nLT5FcnJvckNvZGUgfD0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKICAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCkBAIC0zMzIsNyArMzMyLDcgQEAKIAogICAgIGRlZmF1bHQgOgogICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBocm5nLT5FcnJvckNvZGUgfD0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CkBAIC0zNTIsNyArMzUyLDcgQEAKIAogICAgIGRlZmF1bHQgOgogICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgICBocm5nLT5FcnJvckNvZGUgfD0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICAgICAgYnJlYWs7CkBAIC0zNjEsNyArMzYxLDcgQEAKICAgZWxzZQogICB7CiAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCi0gICAgaHJuZy0+RXJyb3JDb2RlIHw9IEhBTF9STkdfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKyAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgIH0KQEAgLTQwNyw3ICs0MDcsNyBAQAogCiAgICAgZGVmYXVsdCA6CiAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhybmctPkVycm9yQ29kZSB8PSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICBicmVhazsKQEAgLTQyNyw3ICs0MjcsNyBAQAogCiAgICAgZGVmYXVsdCA6CiAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICAgIGhybmctPkVycm9yQ29kZSB8PSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CiAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CiAgICAgICBicmVhazsKQEAgLTQzNiw3ICs0MzYsNyBAQAogICBlbHNlCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICBocm5nLT5FcnJvckNvZGUgfD0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQpAQCAtNDYwLDcgKzQ2MCw3IEBACiAgIGlmIChwQ2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgIGhybmctPkVycm9yQ29kZSB8PSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KQEAgLTQ3Myw3ICs0NzMsNyBAQAogICBlbHNlCiAgIHsKICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KLSAgICBocm5nLT5FcnJvckNvZGUgfD0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKICAgfQpAQCAtNTAzLDcgKzUwMyw3IEBACiAgIGVsc2UKICAgewogICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLwotICAgIGhybmctPkVycm9yQ29kZSB8PSBIQUxfUk5HX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9JTlZBTElEX0NBTExCQUNLOwogICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOwogICB9CkBAIC01MzcsOCArNTM3LDE2IEBACiAKIC8qKgogICAqIEBicmllZiAgR2VuZXJhdGVzIGEgMzItYml0IHJhbmRvbSBudW1iZXIuCi0gICogQG5vdGUgICBFYWNoIHRpbWUgdGhlIHJhbmRvbSBudW1iZXIgZGF0YSBpcyByZWFkIHRoZSBSTkdfRkxBR19EUkRZIGZsYWcKLSAgKiAgICAgICAgIGlzIGF1dG9tYXRpY2FsbHkgY2xlYXJlZC4KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHZhbHVlIG9mIFJOR19GTEFHX0RSRFkgZmxhZyB0byBrbm93IGlmIHZhbGlkCisgICogICAgICAgICByYW5kb20gbnVtYmVyIGlzIGF2YWlsYWJsZSBpbiB0aGUgRFIgcmVnaXN0ZXIgKFJOR19GTEFHX0RSRFkgZmxhZyBzZXQgCisgICogICAgICAgICB3aGVuZXZlciBhIHJhbmRvbSBudW1iZXIgaXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIFJOR19EUiByZWdpc3RlcikuCisgICogICAgICAgICBBZnRlciB0cmFuc2l0aW9uaW5nIGZyb20gMCB0byAxIChyYW5kb20gbnVtYmVyIGF2YWlsYWJsZSksIAorICAqICAgICAgICAgUk5HX0ZMQUdfRFJEWSBmbGFnIHJlbWFpbnMgaGlnaCB1bnRpbCBvdXRwdXQgYnVmZmVyIGJlY29tZXMgZW1wdHkgYWZ0ZXIgcmVhZGluZyAKKyAgKiAgICAgICAgIGZvdXIgd29yZHMgZnJvbSB0aGUgUk5HX0RSIHJlZ2lzdGVyLCBpLmUuIGZ1cnRoZXIgZnVuY3Rpb24gY2FsbHMgCisgICogICAgICAgICB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBhIG5ldyB1MzIgcmFuZG9tIG51bWJlciAoYWRkaXRpb25hbCB3b3JkcyBhcmUKKyAgKiAgICAgICAgIGF2YWlsYWJsZSBhbmQgY2FuIGJlIHJlYWQgYnkgdGhlIGFwcGxpY2F0aW9uLCB0aWxsIFJOR19GTEFHX0RSRFkgZmxhZyByZW1haW5zIGhpZ2gpLgorICAqIEBub3RlICAgV2hlbiBubyBtb3JlIHJhbmRvbSBudW1iZXIgZGF0YSBpcyBhdmFpbGFibGUgaW4gRFIgcmVnaXN0ZXIsIFJOR19GTEFHX0RSRFkKKyAgKiAgICAgICAgIGZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkLgogICAqIEBwYXJhbSAgaHJuZyBwb2ludGVyIHRvIGEgUk5HX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgUk5HLgogICAqIEBwYXJhbSAgcmFuZG9tMzJiaXQgcG9pbnRlciB0byBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlciB2YXJpYWJsZSBpZiBzdWNjZXNzZnVsLgpAQCAtNTY4LDcgKzU3Niw3IEBACiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUk5HX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7CiAgICAgICAgIGhybmctPlN0YXRlID0gSEFMX1JOR19TVEFURV9SRUFEWTsKLSAgICAgICAgaHJuZy0+RXJyb3JDb2RlIHw9IEhBTF9STkdfRVJST1JfVElNRU9VVDsKKyAgICAgICAgaHJuZy0+RXJyb3JDb2RlID0gSEFMX1JOR19FUlJPUl9USU1FT1VUOwogICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgICAgIF9fSEFMX1VOTE9DSyhocm5nKTsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTU4Myw2ICs1OTEsNyBAQAogICB9CiAgIGVsc2UKICAgeworICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfQlVTWTsKICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgIH0KIApAQCAtNjE5LDYgKzYyOCw3IEBACiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhocm5nKTsKIAorICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfQlVTWTsKICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgIH0KIApAQCAtNjUzLDEwICs2NjMsMTQgQEAKICAgLyogUk5HIGNsb2NrIGVycm9yIGludGVycnVwdCBvY2N1cnJlZCAqLwogICBpZiAoX19IQUxfUk5HX0dFVF9JVChocm5nLCBSTkdfSVRfQ0VJKSAhPSBSRVNFVCkKICAgeworICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgIGhybmctPkVycm9yQ29kZSA9IEhBTF9STkdfRVJST1JfQ0xPQ0s7CiAgICAgcm5nY2xvY2tlcnJvciA9IDFVOwogICB9CiAgIGVsc2UgaWYgKF9fSEFMX1JOR19HRVRfSVQoaHJuZywgUk5HX0lUX1NFSSkgIT0gUkVTRVQpCiAgIHsKKyAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICBocm5nLT5FcnJvckNvZGUgPSBIQUxfUk5HX0VSUk9SX1NFRUQ7CiAgICAgcm5nY2xvY2tlcnJvciA9IDFVOwogICB9CiAgIGVsc2UKQEAgLTcyMSw2ICs3MzUsMTEgQEAKIAogLyoqCiAgICogQGJyaWVmICBEYXRhIFJlYWR5IGNhbGxiYWNrIGluIG5vbi1ibG9ja2luZyBtb2RlLgorICAqIEBub3RlICAgV2hlbiBSTkdfRkxBR19EUkRZIGZsYWcgdmFsdWUgaXMgc2V0LCBmaXJzdCByYW5kb20gbnVtYmVyIGhhcyBiZWVuIHJlYWQKKyAgKiAgICAgICAgIGZyb20gRFIgcmVnaXN0ZXIgaW4gSVJRIEhhbmRsZXIgYW5kIGlzIHByb3ZpZGVkIGFzIGNhbGxiYWNrIHBhcmFtZXRlci4KKyAgKiAgICAgICAgIERlcGVuZGluZyBvbiB2YWxpZCBkYXRhIGF2YWlsYWJsZSBpbiB0aGUgY29uZGl0aW9uaW5nIG91dHB1dCBidWZmZXIsCisgICogICAgICAgICBhZGRpdGlvbmFsIHdvcmRzIGNhbiBiZSByZWFkIGJ5IHRoZSBhcHBsaWNhdGlvbiBmcm9tIERSIHJlZ2lzdGVyIHRpbGwgCisgICogICAgICAgICBEUkRZIGJpdCByZW1haW5zIGhpZ2guCiAgICogQHBhcmFtICBocm5nIHBvaW50ZXIgdG8gYSBSTkdfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBSTkcuCiAgICogQHBhcmFtICByYW5kb20zMmJpdCBnZW5lcmF0ZWQgcmFuZG9tIG51bWJlci4KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3J0Yy5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfcnRjLmMKaW5kZXggZDE2YTdjNi4uYjlhMjk1YyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfcnRjLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfcnRjLmMKQEAgLTk2LDEwICs5NiwxMiBAQAogICBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zLiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uCiAgIGluIG9yZGVyIHRvIG9wdGltaXplIG1lbW9yeS9jb2RlIGNvbnN1bXB0aW9uIGZvb3RwcmludC9wZXJmb3JtYW5jZXMuCiAKKyAgWy4uXQogICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfUlRDX1JFR0lTVEVSX0NBTExCQUNLUyB3aGVuIHNldCB0byAxCiAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAgIFVzZSBGdW5jdGlvbiBAcmVmIEhBTF9SVENfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGFuIGludGVycnVwdCBjYWxsYmFjay4KIAorICBbLi5dCiAgIEZ1bmN0aW9uIEByZWYgSEFMX1JUQ19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIEFsYXJtQUV2ZW50Q2FsbGJhY2sgICAgICAgICAgOiBSVEMgQWxhcm0gQSBFdmVudCBjYWxsYmFjay4KICAgICAoKykgQWxhcm1CRXZlbnRDYWxsYmFjayAgICAgICAgICA6IFJUQyBBbGFybSBCIEV2ZW50IGNhbGxiYWNrLgpAQCAtMTM5LDkgKzE0MSwxMSBAQAogI2VuZGlmCiAgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICAgICAgICAgOiBSVEMgTXNwSW5pdCBjYWxsYmFjay4KICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICAgICA6IFJUQyBNc3BEZUluaXQgY2FsbGJhY2suCisgIFsuLl0KICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAogICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCisgIFsuLl0KICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1JUQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CiAgIHdlYWsgZnVuY3Rpb24uCiAgIEByZWYgSEFMX1JUQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCkBAIC0xOTAsNiArMTk0LDcgQEAKICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgICA6IFJUQyBNc3BJbml0IGNhbGxiYWNrLgogICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICAgIDogUlRDIE1zcERlSW5pdCBjYWxsYmFjay4KIAorICBbLi5dCiAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBAcmVmIEhBTF9SVENfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfUlRDX1NUQVRFX1JFU0VULAogICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMgOgogICBleGFtcGxlcyBAcmVmIEFsYXJtQUV2ZW50Q2FsbGJhY2soKSwgQHJlZiBUaW1lU3RhbXBFdmVudENhbGxiYWNrKCkuCkBAIC0xOTksNiArMjA0LDcgQEAKICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIEByZWYgSEFMX1JUQ19Jbml0KCkvQHJlZiBIQUxfUlRDX0RlSW5pdCgpCiAgIGtlZXAgYW5kIHVzZSB0aGUgdXNlciBNc3BJbml0L01zcERlSW5pdCBjYWxsYmFja3MgKHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkKIAorICBbLi5dCiAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX1JUQ19TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgogICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAogICBpbiBIQUxfUlRDX1NUQVRFX1JFQURZIG9yIEhBTF9SVENfU1RBVEVfUkVTRVQgc3RhdGUsCkBAIC0yMDcsNiArMjEzLDcgQEAKICAgdXNpbmcgQHJlZiBIQUxfUlRDX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9SVENfRGVJbml0KCkKICAgb3IgQHJlZiBIQUxfUlRDX0luaXQoKSBmdW5jdGlvbi4KIAorICBbLi5dCiAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1JUQ19SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGFuZCBhbGwgY2FsbGJhY2tzCiAgIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnMuCkBAIC0yOTcsNyArMzA0LDYgQEAKICAgLyogQ2hlY2sgdGhlIFJUQyBwZXJpcGhlcmFsIHN0YXRlICovCiAgIGlmIChocnRjICE9IE5VTEwpCiAgIHsKLSAgICBzdGF0dXMgPSBIQUxfT0s7CiAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVJfRk9STUFUKGhydGMtPkluaXQuSG91ckZvcm1hdCkpOwogICAgIGFzc2VydF9wYXJhbShJU19SVENfQVNZTkNIX1BSRURJVihocnRjLT5Jbml0LkFzeW5jaFByZWRpdikpOwpAQCAtMzY4LDE4ICszNzQsMTAgQEAKICAgICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gICAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBpZiAoUlRDX0VudGVySW5pdE1vZGUoaHJ0YykgIT0gSEFMX09LKQotICAgIHsKLSAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisgICAgLyogRW50ZXIgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICAgIHN0YXR1cyA9IFJUQ19FbnRlckluaXRNb2RlKGhydGMpOwogCi0gICAgICAvKiBTZXQgUlRDIHN0YXRlICovCi0gICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKLSAgICB9Ci0gICAgZWxzZQorICAgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICAgIHsKICAgICAgIC8qIENsZWFyIFJUQ19DUiBGTVQsIE9TRUwgYW5kIFBPTCBCaXRzICovCiAgICAgICBDTEVBUl9CSVQoUlRDLT5DUiwgKFJUQ19DUl9GTVQgfCBSVENfQ1JfUE9MIHwgUlRDX0NSX09TRUwgfCBSVENfQ1JfVEFNUE9FKSk7CkBAIC0zOTAsMzUgKzM4OCwyNSBAQAogICAgICAgV1JJVEVfUkVHKFJUQy0+UFJFUiwgKChocnRjLT5Jbml0LlN5bmNoUHJlZGl2KSB8IChocnRjLT5Jbml0LkFzeW5jaFByZWRpdiA8PCBSVENfUFJFUl9QUkVESVZfQV9Qb3MpKSk7CiAKICAgICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICAgICAgQ0xFQVJfQklUKFJUQy0+SUNTUiwgUlRDX0lDU1JfSU5JVCk7Ci0KLSAgICAgIC8qIElmIENSX0JZUFNIQUQgYml0ID0gMCwgd2FpdCBmb3Igc3luY2hybyBlbHNlIHRoaXMgY2hlY2sgaXMgbm90IG5lZWRlZCAqLwotICAgICAgaWYgKFJFQURfQklUKFJUQy0+Q1IsIFJUQ19DUl9CWVBTSEFEKSA9PSAwVSkKLSAgICAgIHsKLSAgICAgICAgaWYgKEhBTF9SVENfV2FpdEZvclN5bmNocm8oaHJ0YykgIT0gSEFMX09LKQotICAgICAgICB7Ci0gICAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0gICAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwotICAgICAgICB9Ci0gICAgICB9CisgICAgICBzdGF0dXMgPSBSVENfRXhpdEluaXRNb2RlKGhydGMpOwogCiAgICAgICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgICAgIHsKICAgICAgICAgTU9ESUZZX1JFRyhSVEMtPkNSLCBcCiAgICAgICAgICAgICAgICAgICAgUlRDX0NSX1RBTVBBTFJNX1BVIHwgUlRDX0NSX1RBTVBBTFJNX1RZUEUgfCBSVENfQ1JfT1VUMkVOLCBcCiAgICAgICAgICAgICAgICAgICAgaHJ0Yy0+SW5pdC5PdXRQdXRQdWxsVXAgfCBocnRjLT5Jbml0Lk91dFB1dFR5cGUgfCBocnRjLT5Jbml0Lk91dFB1dFJlbWFwKTsKLQotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgLyogU2V0IFJUQyBzdGF0ZSAqLwotICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CiAgICAgICB9CiAgICAgfQorCisgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisKKyAgICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgICB7CisgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CisgICAgfQogICB9CisKICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtODY4LDYgKzg1Niw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDX1NldFRpbWUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMsIFJUQ19UaW1lVHlwZURlZiAqc1RpbWUsIHVpbnQzMl90IEZvcm1hdCkKIHsKICAgdWludDMyX3QgdG1wcmVnOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19GT1JNQVQoRm9ybWF0KSk7CkBAIC04ODIsMjEgKzg3MSw5IEBACiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmIChSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCi0gIHsKLSAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCisgIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgaWYgKEZvcm1hdCA9PSBSVENfRk9STUFUX0JJTikKICAgICB7CkBAIC05NDgsMzQgKzkyNSwxOCBAQAogICAgIFNFVF9CSVQoUlRDLT5DUiwgKHNUaW1lLT5EYXlMaWdodFNhdmluZyB8IHNUaW1lLT5TdG9yZU9wZXJhdGlvbikpOwogCiAgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gICAgQ0xFQVJfQklUKFJUQy0+SUNTUiwgUlRDX0lDU1JfSU5JVCk7CisgICAgc3RhdHVzID0gUlRDX0V4aXRJbml0TW9kZShocnRjKTsKKyAgfQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKLSAgICAvKiBJZiBDUl9CWVBTSEFEIGJpdCA9IDAsIHdhaXQgZm9yIHN5bmNocm8gZWxzZSB0aGlzIGNoZWNrIGlzIG5vdCBuZWVkZWQgKi8KLSAgICBpZiAoUkVBRF9CSVQoUlRDLT5DUiwgUlRDX0NSX0JZUFNIQUQpID09IDBVKQotICAgIHsKLSAgICAgIGlmIChIQUxfUlRDX1dhaXRGb3JTeW5jaHJvKGhydGMpICE9IEhBTF9PSykKLSAgICAgIHsKLSAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9FUlJPUjsKLQotICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgfQotICAgIH0KLQotICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOwotCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CisgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKKyAgfQogICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKIAotICAgIHJldHVybiBIQUxfT0s7Ci0gIH0KKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xMDQ4LDYgKzEwMDksNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ19TZXREYXRlKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCBSVENfRGF0ZVR5cGVEZWYgKnNEYXRlLCB1aW50MzJfdCBGb3JtYXQpCiB7CiAgIHVpbnQzMl90IGRhdGV0bXByZWc7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChGb3JtYXQpKTsKQEAgLTEwOTAsNTUgKzEwNTIsMjkgQEAKICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKLSAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgaWYgKFJUQ19FbnRlckluaXRNb2RlKGhydGMpICE9IEhBTF9PSykKLSAgewotICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgLyogU2V0IFJUQyBzdGF0ZSovCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KLSAgZWxzZQorICAvKiBFbnRlciBJbml0aWFsaXphdGlvbiBtb2RlICovCisgIHN0YXR1cyA9IFJUQ19FbnRlckluaXRNb2RlKGhydGMpOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewogICAgIC8qIFNldCB0aGUgUlRDX0RSIHJlZ2lzdGVyICovCiAgICAgV1JJVEVfUkVHKFJUQy0+RFIsICh1aW50MzJfdCkoZGF0ZXRtcHJlZyAmIFJUQ19EUl9SRVNFUlZFRF9NQVNLKSk7CiAKICAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBDTEVBUl9CSVQoUlRDLT5JQ1NSLCBSVENfSUNTUl9JTklUKTsKLQotICAgIC8qIElmIENSX0JZUFNIQUQgYml0ID0gMCwgd2FpdCBmb3Igc3luY2hybyBlbHNlIHRoaXMgY2hlY2sgaXMgbm90IG5lZWRlZCAqLwotICAgIGlmIChSRUFEX0JJVChSVEMtPkNSLCBSVENfQ1JfQllQU0hBRCkgPT0gMFUpCi0gICAgewotICAgICAgaWYgKEhBTF9SVENfV2FpdEZvclN5bmNocm8oaHJ0YykgIT0gSEFMX09LKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisgICAgc3RhdHVzID0gUlRDX0V4aXRJbml0TW9kZShocnRjKTsKKyAgfQorCQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisgCisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICB7CiAKICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFkgOwotCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgIHJldHVybiBIQUxfT0s7CiAgIH0KKyAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICBfX0hBTF9VTkxPQ0soaHJ0Yyk7CisKKyAgcmV0dXJuIHN0YXR1czsKIH0KIAogLyoqCkBAIC0xOTIzLDYgKzE4NTksNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgUlRDX0VudGVySW5pdE1vZGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIFVOVVNFRChocnRjKTsKIApAQCAtMTkzNCwyMCArMTg3MSw2MCBAQAogCiAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKICAgICAvKiBXYWl0IHRpbGwgUlRDIGlzIGluIElOSVQgc3RhdGUgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICAgIHdoaWxlIChSRUFEX0JJVChSVEMtPklDU1IsIFJUQ19JQ1NSX0lOSVRGKSA9PSAwVSkKKyAgICB3aGlsZSAoKFJFQURfQklUKFJUQy0+SUNTUiwgUlRDX0lDU1JfSU5JVEYpID09IDBVKSAmJiAoc3RhdHVzICE9IEhBTF9USU1FT1VUKSkKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQogICAgICAgewotICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKICAgICAgIH0KICAgICB9CiAgIH0KIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAKIC8qKgorICAqIEBicmllZiAgRXhpdCB0aGUgUlRDIEluaXRpYWxpemF0aW9uIG1vZGUuCisgICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIFJUQ19FeGl0SW5pdE1vZGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCit7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKworICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgQ0xFQVJfQklUKFJUQy0+SUNTUiwgUlRDX0lDU1JfSU5JVCk7CisKKyAgLyogSWYgQ1JfQllQU0hBRCBiaXQgPSAwLCB3YWl0IGZvciBzeW5jaHJvICovCisgIGlmIChSRUFEX0JJVChSVEMtPkNSLCBSVENfQ1JfQllQU0hBRCkgPT0gMFUpCisgIHsKKyAgICBpZiAoSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhocnRjKSAhPSBIQUxfT0spCisgICAgeworICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7CisgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICB9CisgIH0KKyAgZWxzZSAvKiBXQSAyLjkuNiBDYWxlbmRhciBpbml0aWFsaXphdGlvbiBtYXkgZmFpbCBpbiBjYXNlIG9mIGNvbnNlY3V0aXZlIElOSVQgbW9kZSBlbnRyeSAqLworICB7CisgICAgLyogQ2xlYXIgQllQU0hBRCBiaXQgKi8KKyAgICBDTEVBUl9CSVQoUlRDLT5DUiwgUlRDX0NSX0JZUFNIQUQpOworICAgIGlmIChIQUxfUlRDX1dhaXRGb3JTeW5jaHJvKGhydGMpICE9IEhBTF9PSykKKyAgICB7CisgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKKyAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgIH0KKyAgICAvKiBSZXN0b3JlIEJZUFNIQUQgYml0ICovCisgICAgU0VUX0JJVChSVEMtPkNSLCBSVENfQ1JfQllQU0hBRCk7CisgIH0KKworICByZXR1cm4gc3RhdHVzOworfQorCisKKworLyoqCiAgICogQGJyaWVmICBDb252ZXJ0IGEgMiBkaWdpdCBkZWNpbWFsIHRvIEJDRCBmb3JtYXQuCiAgICogQHBhcmFtICBWYWx1ZSBCeXRlIHRvIGJlIGNvbnZlcnRlZAogICAqIEByZXR2YWwgQ29udmVydGVkIGJ5dGUKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3J0Y19leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfcnRjX2V4LmMKaW5kZXggNmY4Mjg1ZS4uZmMzYWRjZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfcnRjX2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfcnRjX2V4LmMKQEAgLTU0MiwxMyArNTQyLDE4IEBACiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIENoZWNrIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IG9ubHkgd2hlbiB3YWtlIHVwIHRpbWVyIGVuYWJsZWQqLwotICBpZiAoUkVBRF9CSVQoUlRDLT5DUiwgUlRDX0NSX1dVVEUpICE9IDBVKQorICAvKiBDbGVhciBXVVRFIGluIFJUQ19DUiB0byBkaXNhYmxlIHRoZSB3YWtldXAgdGltZXIgKi8KKyAgQ0xFQVJfQklUKGhydGMtPkluc3RhbmNlLT5DUiwgUlRDX0NSX1dVVEUpOworCisgIC8qIFBvbGwgV1VUV0YgdW50aWwgaXQgaXMgc2V0IGluIFJUQ19JQ1NSIHRvIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIHRvIHdha2V1cCBhdXRvcmVsb2FkCisgICAgIGNvdW50ZXIgYW5kIHRvIFdVQ0tTRUxbMjowXSBiaXRzIGlzIGFsbG93ZWQuIFRoaXMgc3RlcCBtdXN0IGJlIHNraXBwZWQgaW4KKyAgICAgY2FsZW5kYXIgaW5pdGlhbGl6YXRpb24gbW9kZS4gKi8KKyAgaWYgKFJFQURfQklUKGhydGMtPkluc3RhbmNlLT5JQ1NSLCBSVENfSUNTUl9JTklURikgPT0gMFUpCiAgIHsKICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgICAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgICB3aGlsZSAoUkVBRF9CSVQoUlRDLT5JQ1NSLCBSVENfSUNTUl9XVVRXRikgIT0gMFUpCisgICAgd2hpbGUgKFJFQURfQklUKGhydGMtPkluc3RhbmNlLT5JQ1NSLCBSVENfSUNTUl9XVVRXRikgPT0gMFUpCiAgICAgewogICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQogICAgICAgewpAQCAtNTY1LDQyICs1NzAsMTQgQEAKICAgICB9CiAgIH0KIAotICAvKiBEaXNhYmxlIFdha2UgVXAgdGltZXIgKi8KLSAgQ0xFQVJfQklUKFJUQy0+Q1IsIFJUQ19DUl9XVVRFKTsKLQotICAvKiBDbGVhciBmbGFnIFdha2UtVXAgKi8KLSAgV1JJVEVfUkVHKFJUQy0+U0NSLCBSVENfU0NSX0NXVVRGKTsKLQotICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotCi0gIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICB3aGlsZSAoUkVBRF9CSVQoUlRDLT5JQ1NSLCBSVENfSUNTUl9XVVRXRikgPT0gMFUpCi0gIHsKLSAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCi0gICAgewotICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7Ci0KLSAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgIH0KLSAgfQorICAvKiBDb25maWd1cmUgdGhlIGNsb2NrIHNvdXJjZSAqLworICBNT0RJRllfUkVHKGhydGMtPkluc3RhbmNlLT5DUiwgUlRDX0NSX1dVQ0tTRUwsICh1aW50MzJfdClXYWtlVXBDbG9jayk7CiAKICAgLyogQ29uZmlndXJlIHRoZSBXYWtldXAgVGltZXIgY291bnRlciAqLwotICBXUklURV9SRUcoUlRDLT5XVVRSLCAodWludDMyX3QpV2FrZVVwQ291bnRlcik7Ci0KLSAgLyogQ2xlYXIgdGhlIFdha2V1cCBUaW1lciBjbG9jayBzb3VyY2UgYml0cyBpbiBDUiByZWdpc3RlciAqLwotICBDTEVBUl9CSVQoUlRDLT5DUiwgUlRDX0NSX1dVQ0tTRUwpOwotCi0gIC8qIENvbmZpZ3VyZSB0aGUgY2xvY2sgc291cmNlICovCi0gIE1PRElGWV9SRUcoUlRDLT5DUiwgUlRDX0NSX1dVQ0tTRUwsICh1aW50MzJfdClXYWtlVXBDbG9jayk7CisgIFdSSVRFX1JFRyhocnRjLT5JbnN0YW5jZS0+V1VUUiwgKHVpbnQzMl90KVdha2VVcENvdW50ZXIpOwogCiAgIC8qIEVuYWJsZSB0aGUgV2FrZXVwIFRpbWVyICovCi0gIFNFVF9CSVQoUlRDLT5DUiwgUlRDX0NSX1dVVEUpOworICBTRVRfQklUKGhydGMtPkluc3RhbmNlLT5DUiwgUlRDX0NSX1dVVEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKQEAgLTYzNiwxMyArNjEzLDIxIEBACiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIENoZWNrIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IG9ubHkgd2hlbiB3YWtlIHVwIHRpbWVyIGVuYWJsZWQgKi8KLSAgaWYgKFJFQURfQklUKFJUQy0+Q1IsIFJUQ19DUl9XVVRFKSAhPSAwVSkKKyAgLyogQ2xlYXIgV1VURSBpbiBSVENfQ1IgdG8gZGlzYWJsZSB0aGUgd2FrZXVwIHRpbWVyICovCisgIENMRUFSX0JJVChocnRjLT5JbnN0YW5jZS0+Q1IsIFJUQ19DUl9XVVRFKTsKKworICAvKiBDbGVhciBmbGFnIFdha2UtVXAgKi8KKyAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0NMRUFSX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VURik7CisKKyAgLyogUG9sbCBXVVRXRiB1bnRpbCBpdCBpcyBzZXQgaW4gUlRDX0lDU1IgdG8gbWFrZSBzdXJlIHRoZSBhY2Nlc3MgdG8gd2FrZXVwIGF1dG9yZWxvYWQKKyAgICAgY291bnRlciBhbmQgdG8gV1VDS1NFTFsyOjBdIGJpdHMgaXMgYWxsb3dlZC4gVGhpcyBzdGVwIG11c3QgYmUgc2tpcHBlZCBpbgorICAgICBjYWxlbmRhciBpbml0aWFsaXphdGlvbiBtb2RlLiAqLworICBpZiAoUkVBRF9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklDU1IsIFJUQ19JQ1NSX0lOSVRGKSA9PSAwVSkKICAgewogICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKICAgICAvKiBXYWl0IHRpbGwgUlRDIFdVVFdGIGZsYWcgaXMgcmVzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICAgIHdoaWxlIChSRUFEX0JJVChSVEMtPklDU1IsIFJUQ19JQ1NSX1dVVFdGKSAhPSAwVSkKKyAgICB3aGlsZSAoUkVBRF9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklDU1IsIFJUQ19JQ1NSX1dVVFdGKSA9PSAwVSkKICAgICB7CiAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7CkBAIC02NTgsMzggKzY0Myw5IEBACiAgICAgICB9CiAgICAgfQogICB9Ci0gIC8qIERpc2FibGUgdGhlIFdha2UtVXAgdGltZXIgKi8KLSAgQ0xFQVJfQklUKFJUQy0+Q1IsIFJUQ19DUl9XVVRFKTsKLQotICAvKiBDbGVhciBmbGFnIFdha2UtVXAgKi8KLSAgV1JJVEVfUkVHKFJUQy0+U0NSLCBSVENfU0NSX0NXVVRGKTsKLSAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfQ0xFQVJfSVQoKTsKLQotICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotCi0gIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICB3aGlsZSAoUkVBRF9CSVQoUlRDLT5JQ1NSLCBSVENfSUNTUl9XVVRXRikgPT0gMFUpCi0gIHsKLSAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCi0gICAgewotICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7Ci0KLSAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgIH0KLSAgfQotCiAgIC8qIENvbmZpZ3VyZSB0aGUgV2FrZXVwIFRpbWVyIGNvdW50ZXIgKi8KICAgV1JJVEVfUkVHKFJUQy0+V1VUUiwgKHVpbnQzMl90KVdha2VVcENvdW50ZXIpOwogCi0gIC8qIENsZWFyIHRoZSBXYWtldXAgVGltZXIgY2xvY2sgc291cmNlIGJpdHMgaW4gQ1IgcmVnaXN0ZXIgKi8KLSAgQ0xFQVJfQklUKFJUQy0+Q1IsIFJUQ19DUl9XVUNLU0VMKTsKLQogICAvKiBDb25maWd1cmUgdGhlIGNsb2NrIHNvdXJjZSAqLwogICBNT0RJRllfUkVHKFJUQy0+Q1IsIFJUQ19DUl9XVUNLU0VMLCAodWludDMyX3QpV2FrZVVwQ2xvY2spOwogCkBAIC02OTcsNyArNjUzLDcgQEAKICAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKCk7CiAgIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9FWFRJX1JJU0lOR19JVCgpOwogCi0gIC8qIENvbmZpZ3VyZSB0aGUgSW50ZXJydXB0IGluIHRoZSBSVENfQ1IgcmVnaXN0ZXIgYW5kIEVuYWJsZSB0aGUgV2FrZXVwIFRpbWVyKi8KKyAgLyogQ29uZmlndXJlIHRoZSBJbnRlcnJ1cHQgaW4gdGhlIFJUQ19DUiByZWdpc3RlciBhbmQgRW5hYmxlIHRoZSBXYWtldXAgVGltZXIgKi8gCiAgIFNFVF9CSVQoUlRDLT5DUiwgKFJUQ19DUl9XVVRJRSB8IFJUQ19DUl9XVVRFKSk7CiAKICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCkBAIC0xMTM0LDYgKzEwOTAsOCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X1NldFJlZkNsb2NrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhocnRjKTsKIApAQCAtMTE0MiwzOSArMTEwMCwyOSBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKiBTZXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICBpZiAoUlRDX0VudGVySW5pdE1vZGUoaHJ0YykgIT0gSEFMX09LKQotICB7Ci0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBTZXQgUlRDIHN0YXRlKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCisgIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgLyogRW5hYmxlIGNsb2NrcmVmIGRldGVjdGlvbiAqLwogICAgIFNFVF9CSVQoUlRDLT5DUiwgUlRDX0NSX1JFRkNLT04pOwogCiAgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gICAgQ0xFQVJfQklUKFJUQy0+SUNTUiwgUlRDX0lDU1JfSU5JVCk7CisgICAgc3RhdHVzID0gUlRDX0V4aXRJbml0TW9kZShocnRjKTsKICAgfQogCiAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKIAotICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCi0gIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CisgIH0KIAogICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgIF9fSEFMX1VOTE9DSyhocnRjKTsKIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTExODQsNiArMTEzMiw4IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfRGVhY3RpdmF0ZVJlZkNsb2NrKFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKQogeworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CisKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhocnRjKTsKIApAQCAtMTE5MiwzOSArMTE0MiwyOSBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKiBTZXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICBpZiAoUlRDX0VudGVySW5pdE1vZGUoaHJ0YykgIT0gSEFMX09LKQotICB7Ci0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBTZXQgUlRDIHN0YXRlKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCisgIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgLyogRGlzYWJsZSBjbG9ja3JlZiBkZXRlY3Rpb24gKi8KICAgICBDTEVBUl9CSVQoUlRDLT5DUiwgUlRDX0NSX1JFRkNLT04pOwogCiAgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gICAgQ0xFQVJfQklUKFJUQy0+SUNTUiwgUlRDX0lDU1JfSU5JVCk7CisgICAgc3RhdHVzID0gUlRDX0V4aXRJbml0TW9kZShocnRjKTsKICAgfQogCiAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKIAotICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCi0gIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CisgIH0KIAogICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgIF9fSEFMX1VOTE9DSyhocnRjKTsKIAotICByZXR1cm4gSEFMX09LOworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3NhaS5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfc2FpLmMKaW5kZXggMmQ3MTlhYS4uZDcwMzY3NiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfc2FpLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfc2FpLmMKQEAgLTEzOSwxMiArMTM5LDEzIEBACiAKICAgICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KKyAgICBbLi5dCiAgICAgVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1NBSV9SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQogICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCi0gICAgVXNlIGZ1bmN0aW9ucyBAcmVmIEhBTF9TQUlfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KKyAgICBVc2UgZnVuY3Rpb25zIEhBTF9TQUlfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KIAotICAgIEZ1bmN0aW9uIEByZWYgSEFMX1NBSV9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgWy4uXQorICAgIEZ1bmN0aW9uIEhBTF9TQUlfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgKCspIFJ4Q3BsdENhbGxiYWNrICAgICA6IFNBSSByZWNlaXZlIGNvbXBsZXRlLgogICAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayA6IFNBSSByZWNlaXZlIGhhbGYgY29tcGxldGUuCiAgICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgIDogU0FJIHRyYW5zbWl0IGNvbXBsZXRlLgpAQCAtMTUyLDEzICsxNTMsMTYgQEAKICAgICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgOiBTQUkgZXJyb3IuCiAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgIDogU0FJIE1zcEluaXQuCiAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgIDogU0FJIE1zcERlSW5pdC4KKyAgICBbLi5dCiAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBjYWxsYmFjayBJRAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfU0FJX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICBbLi5dCisgICAgVXNlIGZ1bmN0aW9uIEhBTF9TQUlfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLgotICAgIEByZWYgSEFMX1NBSV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgSEFMX1NBSV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgYW5kIHRoZSBjYWxsYmFjayBJRC4KKyAgICBbLi5dCiAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAgICgrKSBSeENwbHRDYWxsYmFjayAgICAgOiBTQUkgcmVjZWl2ZSBjb21wbGV0ZS4KICAgICAgICgrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgOiBTQUkgcmVjZWl2ZSBoYWxmIGNvbXBsZXRlLgpAQCAtMTY4LDIzICsxNzIsMjYgQEAKICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgOiBTQUkgTXNwSW5pdC4KICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgOiBTQUkgTXNwRGVJbml0LgogCi0gICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX1NBSV9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX1NBSV9TVEFURV9SRVNFVAorICAgIFsuLl0KKyAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX1NBSV9Jbml0IGFuZCBpZiB0aGUgc3RhdGUgaXMgSEFMX1NBSV9TVEFURV9SRVNFVAogICAgIGFsbCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnM6Ci0gICAgZXhhbXBsZXMgQHJlZiBIQUxfU0FJX1J4Q3BsdENhbGxiYWNrKCksIEByZWYgSEFMX1NBSV9FcnJvckNhbGxiYWNrKCkuCisgICAgZXhhbXBsZXMgSEFMX1NBSV9SeENwbHRDYWxsYmFjaygpLCBIQUxfU0FJX0Vycm9yQ2FsbGJhY2soKS4KICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGFyZSByZXNwZWN0aXZlbHkKLSAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfU0FJX0luaXQKLSAgICBhbmQgQHJlZiAgSEFMX1NBSV9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9TQUlfSW5pdCBhbmQgQHJlZiBIQUxfU0FJX0RlSW5pdAorICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBIQUxfU0FJX0luaXQKKyAgICBhbmQgSEFMX1NBSV9EZUluaXQgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCisgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBIQUxfU0FJX0luaXQgYW5kIEhBTF9TQUlfRGVJbml0CiAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KIAorICAgIFsuLl0KICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIFJFQURZIHN0YXRlIG9ubHkuCiAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAogICAgIGluIFJFQURZIG9yIFJFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZAogICAgIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgIHVzaW5nIEByZWYgSEFMX1NBSV9SZWdpc3RlckNhbGxiYWNrIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1NBSV9EZUluaXQKLSAgICBvciBAcmVmIEhBTF9TQUlfSW5pdCBmdW5jdGlvbi4KKyAgICB1c2luZyBIQUxfU0FJX1JlZ2lzdGVyQ2FsbGJhY2sgYmVmb3JlIGNhbGxpbmcgSEFMX1NBSV9EZUluaXQKKyAgICBvciBIQUxfU0FJX0luaXQgZnVuY3Rpb24uCiAKKyAgICBbLi5dCiAgICAgV2hlbiB0aGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfU0FJX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgogICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCiAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KQEAgLTE5Myw3ICsyMDAsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3NhaV9leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfc2FpX2V4LmMKaW5kZXggMjczNzRhMC4uZmFmMGQ3NCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfc2FpX2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfc2FpX2V4LmMKQEAgLTEwLDcgKzEwLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9zbWFydGNhcmQuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3NtYXJ0Y2FyZC5jCmluZGV4IDAwMzkwNTUuLjc3Mjc3Y2QgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX3NtYXJ0Y2FyZC5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3NtYXJ0Y2FyZC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC03NTcsMjkgKzc1NywzMCBAQAogICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfUnhDcGx0Q2FsbGJhY2soKQogICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfRXJyb3JDYWxsYmFjaygpCiAKKyAgWy4uXQogICAgICgjKSBOb24tQmxvY2tpbmcgbW9kZSB0cmFuc2ZlcnMgY291bGQgYmUgYWJvcnRlZCB1c2luZyBBYm9ydCBBUEkncyA6Ci0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0KCkKLSAgICAgICAgKCspIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdCgpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZSgpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0X0lUKCkKLSAgICAgICAgKCspIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdF9JVCgpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZV9JVCgpCisgICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9BYm9ydCgpCisgICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9BYm9ydFRyYW5zbWl0KCkKKyAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZSgpCisgICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9BYm9ydF9JVCgpCisgICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9BYm9ydFRyYW5zbWl0X0lUKCkKKyAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZV9JVCgpCiAKICAgICAoIykgRm9yIEFib3J0IHNlcnZpY2VzIGJhc2VkIG9uIGludGVycnVwdHMgKEhBTF9TTUFSVENBUkRfQWJvcnR4eHhfSVQpLCBhIHNldCBvZiBBYm9ydCBDb21wbGV0ZSBDYWxsYmFja3MgYXJlIHByb3ZpZGVkOgotICAgICAgICAoKykgSEFMX1NNQVJUQ0FSRF9BYm9ydENwbHRDYWxsYmFjaygpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKQotICAgICAgICAoKykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmVDcGx0Q2FsbGJhY2soKQorICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfQWJvcnRDcGx0Q2FsbGJhY2soKQorICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjaygpCisgICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmVDcGx0Q2FsbGJhY2soKQogCiAgICAgKCMpIEluIE5vbi1CbG9ja2luZyBtb2RlIHRyYW5zZmVycywgcG9zc2libGUgZXJyb3JzIGFyZSBzcGxpdCBpbnRvIDIgY2F0ZWdvcmllcy4KICAgICAgICAgRXJyb3JzIGFyZSBoYW5kbGVkIGFzIGZvbGxvd3MgOgotICAgICAgICgrKSBFcnJvciBpcyBjb25zaWRlcmVkIGFzIFJlY292ZXJhYmxlIGFuZCBub24gYmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBnbyB0aWxsIGVuZCwgYnV0IGVycm9yIHNldmVyaXR5IGlzCi0gICAgICAgICAgIHRvIGJlIGV2YWx1YXRlZCBieSB1c2VyIDogdGhpcyBjb25jZXJucyBGcmFtZSBFcnJvciwgUGFyaXR5IEVycm9yIG9yIE5vaXNlIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiAuCi0gICAgICAgICAgIFJlY2VpdmVkIGNoYXJhY3RlciBpcyB0aGVuIHJldHJpZXZlZCBhbmQgc3RvcmVkIGluIFJ4IGJ1ZmZlciwgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeSBlcnJvciB0eXBlLAotICAgICAgICAgICBhbmQgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4gVHJhbnNmZXIgaXMga2VwdCBvbmdvaW5nIG9uIFNNQVJUQ0FSRCBzaWRlLgotICAgICAgICAgICBJZiB1c2VyIHdhbnRzIHRvIGFib3J0IGl0LCBBYm9ydCBzZXJ2aWNlcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHVzZXIuCi0gICAgICAgKCspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgQmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIHByb3Blcmx5IGFuZCBpcyBhYm9ydGVkLgotICAgICAgICAgICBUaGlzIGNvbmNlcm5zIEZyYW1lIEVycm9yIGluIEludGVycnVwdCBtb2RlIHRyYW5taXNzaW9uLCBPdmVycnVuIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiBhbmQgYWxsIGVycm9ycyBpbiBETUEgbW9kZS4KLSAgICAgICAgICAgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeSBlcnJvciB0eXBlLCBhbmQgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4KKyAgICAgICAoKyspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgUmVjb3ZlcmFibGUgYW5kIG5vbiBibG9ja2luZyA6IFRyYW5zZmVyIGNvdWxkIGdvIHRpbGwgZW5kLCBidXQgZXJyb3Igc2V2ZXJpdHkgaXMKKyAgICAgICAgICAgIHRvIGJlIGV2YWx1YXRlZCBieSB1c2VyIDogdGhpcyBjb25jZXJucyBGcmFtZSBFcnJvciwgUGFyaXR5IEVycm9yIG9yIE5vaXNlIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiAuCisgICAgICAgICAgICBSZWNlaXZlZCBjaGFyYWN0ZXIgaXMgdGhlbiByZXRyaWV2ZWQgYW5kIHN0b3JlZCBpbiBSeCBidWZmZXIsIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwKKyAgICAgICAgICAgIGFuZCBIQUxfU01BUlRDQVJEX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLiBUcmFuc2ZlciBpcyBrZXB0IG9uZ29pbmcgb24gU01BUlRDQVJEIHNpZGUuCisgICAgICAgICAgICBJZiB1c2VyIHdhbnRzIHRvIGFib3J0IGl0LCBBYm9ydCBzZXJ2aWNlcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHVzZXIuCisgICAgICAgKCsrKSBFcnJvciBpcyBjb25zaWRlcmVkIGFzIEJsb2NraW5nIDogVHJhbnNmZXIgY291bGQgbm90IGJlIGNvbXBsZXRlZCBwcm9wZXJseSBhbmQgaXMgYWJvcnRlZC4KKyAgICAgICAgICAgIFRoaXMgY29uY2VybnMgRnJhbWUgRXJyb3IgaW4gSW50ZXJydXB0IG1vZGUgdHJhbm1pc3Npb24sIE92ZXJydW4gRXJyb3IgaW4gSW50ZXJydXB0IG1vZGUgcmVjZXB0aW9uIGFuZCBhbGwgZXJyb3JzIGluIERNQSBtb2RlLgorICAgICAgICAgICAgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeSBlcnJvciB0eXBlLCBhbmQgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4KIAogQGVuZHZlcmJhdGltCiAgICogQHsKQEAgLTIyOTIsNiArMjI5Myw3IEBACiAgIFNNQVJUQ0FSRF9DbG9ja1NvdXJjZVR5cGVEZWYgY2xvY2tzb3VyY2U7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHJldCA9IEhBTF9PSzsKICAgY29uc3QgdWludDE2X3QgU01BUlRDQVJEUHJlc2NUYWJsZVsxMl0gPSB7MVUsIDJVLCA0VSwgNlUsIDhVLCAxMFUsIDEyVSwgMTZVLCAzMlUsIDY0VSwgMTI4VSwgMjU2VX07CisgIHVpbnQzMl90IHBjbGs7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1NNQVJUQ0FSRF9JTlNUQU5DRShoc21hcnRjYXJkLT5JbnN0YW5jZSkpOwpAQCAtMjM2MywxNiArMjM2NSwxOSBAQAogICBzd2l0Y2ggKGNsb2Nrc291cmNlKQogICB7CiAgICAgY2FzZSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfUENMSzE6Ci0gICAgICB0bXByZWcgPSAodWludDE2X3QpKCgoSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKSAvIFNNQVJUQ0FSRFByZXNjVGFibGVbaHNtYXJ0Y2FyZC0+SW5pdC5DbG9ja1ByZXNjYWxlcl0pICsgKGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUgLyAyVSkpIC8gaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSk7CisgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKKyAgICAgIHRtcHJlZyA9ICh1aW50MTZfdCkoKChwY2xrIC8gU01BUlRDQVJEUHJlc2NUYWJsZVtoc21hcnRjYXJkLT5Jbml0LkNsb2NrUHJlc2NhbGVyXSkgKyAoaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSAvIDJVKSkgLyBoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgU01BUlRDQVJEX0NMT0NLU09VUkNFX1BDTEsyOgotICAgICAgdG1wcmVnID0gKHVpbnQxNl90KSgoKEhBTF9SQ0NfR2V0UENMSzJGcmVxKCkgLyBTTUFSVENBUkRQcmVzY1RhYmxlW2hzbWFydGNhcmQtPkluaXQuQ2xvY2tQcmVzY2FsZXJdKSArIChoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlIC8gMlUpKSAvIGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUpOworICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7CisgICAgICB0bXByZWcgPSAodWludDE2X3QpKCgocGNsayAvIFNNQVJUQ0FSRFByZXNjVGFibGVbaHNtYXJ0Y2FyZC0+SW5pdC5DbG9ja1ByZXNjYWxlcl0pICsgKGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUgLyAyVSkpIC8gaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSk7CiAgICAgICBicmVhazsKICAgICBjYXNlIFNNQVJUQ0FSRF9DTE9DS1NPVVJDRV9IU0k6CiAgICAgICB0bXByZWcgPSAodWludDE2X3QpKCgoSFNJX1ZBTFVFIC8gU01BUlRDQVJEUHJlc2NUYWJsZVtoc21hcnRjYXJkLT5Jbml0LkNsb2NrUHJlc2NhbGVyXSkgKyAoaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSAvIDJVKSkgLyBoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgU01BUlRDQVJEX0NMT0NLU09VUkNFX1NZU0NMSzoKLSAgICAgIHRtcHJlZyA9ICh1aW50MTZfdCkoKChIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpIC8gU01BUlRDQVJEUHJlc2NUYWJsZVtoc21hcnRjYXJkLT5Jbml0LkNsb2NrUHJlc2NhbGVyXSkgKyAoaHNtYXJ0Y2FyZC0+SW5pdC5CYXVkUmF0ZSAvIDJVKSkgLyBoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlKTsKKyAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpOworICAgICAgdG1wcmVnID0gKHVpbnQxNl90KSgoKHBjbGsgLyBTTUFSVENBUkRQcmVzY1RhYmxlW2hzbWFydGNhcmQtPkluaXQuQ2xvY2tQcmVzY2FsZXJdKSArIChoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlIC8gMlUpKSAvIGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBTTUFSVENBUkRfQ0xPQ0tTT1VSQ0VfTFNFOgogICAgICAgdG1wcmVnID0gKHVpbnQxNl90KSgoKHVpbnQxNl90KShMU0VfVkFMVUUgLyBTTUFSVENBUkRQcmVzY1RhYmxlW2hzbWFydGNhcmQtPkluaXQuQ2xvY2tQcmVzY2FsZXJdKSArIChoc21hcnRjYXJkLT5Jbml0LkJhdWRSYXRlIC8gMlUpKSAvIGhzbWFydGNhcmQtPkluaXQuQmF1ZFJhdGUpOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfc21hcnRjYXJkX2V4LmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9zbWFydGNhcmRfZXguYwppbmRleCBjM2Y5Yzk1Li44YzczMWM2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF9zbWFydGNhcmRfZXguYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9zbWFydGNhcmRfZXguYwpAQCAtMjksNyArMjksNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTU1LDExICs1NSwxNyBAQAogCiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgU01BUlRDQVJERXhfUHJpdmF0ZV9Db25zdGFudHMgU01BUlRDQVJEIEV4dGVuZGVkIFByaXZhdGUgQ29uc3RhbnRzCisgICogQHsKKyAgKi8KIC8qIFVBUlQgUlggRklGTyBkZXB0aCAqLwogI2RlZmluZSBSWF9GSUZPX0RFUFRIIDhVCiAKIC8qIFVBUlQgVFggRklGTyBkZXB0aCAqLwogI2RlZmluZSBUWF9GSUZPX0RFUFRIIDhVCisvKioKKyAgKiBAfQorICAqLwogCiAvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE4OCw4ICsxOTQsOCBAQAogICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBGSUZPIG1vZGUgcmVsYXRlZCBjYWxsYmFjayBmdW5jdGlvbnMuCiAKICAgICAoIykgVFgvUlggRmlmb3MgQ2FsbGJhY2tzOgotICAgICAgICAoKykgSEFMX1NNQVJUQ0FSREV4X1J4Rmlmb0Z1bGxDYWxsYmFjaygpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJERXhfVHhGaWZvRW1wdHlDYWxsYmFjaygpCisgICAgICAgICgrKykgSEFMX1NNQVJUQ0FSREV4X1J4Rmlmb0Z1bGxDYWxsYmFjaygpCisgICAgICAgICgrKykgSEFMX1NNQVJUQ0FSREV4X1R4Rmlmb0VtcHR5Q2FsbGJhY2soKQogCiBAZW5kdmVyYmF0aW0KICAgKiBAewpAQCAtMjMxLDE1ICsyMzcsMTYgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFNNQVJUQ0FSRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIEV4dGVuZGVkIFBlcmlwaGVyYWwgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucworLyoqIEBkZWZncm91cCBTTUFSVENBUkRFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIEV4dGVuZGVkIFBlcmlwaGVyYWwgRklGTyBDb250cm9sIGZ1bmN0aW9ucwogICAqICBAYnJpZWYgICBTTUFSVENBUkQgY29udHJvbCBmdW5jdGlvbnMKICAgKgogQHZlcmJhdGltCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgIyMjIyMKKyAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgRklGTyBDb250cm9sIGZ1bmN0aW9ucyAjIyMjIwogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBbLi5dCi0gICAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb250cm9sIHRoZSBTTUFSVENBUkQuCisgICAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb250cm9sIHRoZSBTTUFSVENBUkQKKyAgICBGSUZPIGZlYXR1cmUuCiAgICAgICgrKSBIQUxfU01BUlRDQVJERXhfRW5hYmxlRmlmb01vZGUoKSBBUEkgZW5hYmxlcyB0aGUgRklGTyBtb2RlCiAgICAgICgrKSBIQUxfU01BUlRDQVJERXhfRGlzYWJsZUZpZm9Nb2RlKCkgQVBJIGRpc2FibGVzIHRoZSBGSUZPIG1vZGUKICAgICAgKCspIEhBTF9TTUFSVENBUkRFeF9TZXRUeEZpZm9UaHJlc2hvbGQoKSBBUEkgc2V0cyB0aGUgVFggRklGTyB0aHJlc2hvbGQKQEAgLTQzMyw3ICs0NDAsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgU01BUlRDQVJERXhfUHJpdmF0ZV9GdW5jdGlvbnMgIFNNQVJUQ0FSRCBFeHRlbmRlZCBwcml2YXRlIEZ1bmN0aW9ucworLyoqIEBkZWZncm91cCBTTUFSVENBUkRFeF9Qcml2YXRlX0Z1bmN0aW9ucyAgU01BUlRDQVJEIEV4dGVuZGVkIFByaXZhdGUgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfc21idXMuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3NtYnVzLmMKaW5kZXggYWY2OTlhMi4uODI5YjEyYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfc21idXMuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF9zbWJ1cy5jCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9zcGkuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3NwaS5jCmluZGV4IGI2ZTVlZDAuLmZhNWUzZWEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfaGFsX3NwaS5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3NwaS5jCkBAIC02NSwxNiArNjUsMTYgQEAKICAgICAgICAgICBVc2UgRnVuY3Rpb25zIEhBTF9TUElfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGFuIGludGVycnVwdCBjYWxsYmFjay4KIAogICAgICAgICAgIEZ1bmN0aW9uIEhBTF9TUElfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgotICAgICAgICAgICAgKCspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IFNQSSBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBSeENwbHRDYWxsYmFjayAgICAgICAgOiBTUEkgUnggQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgVHhSeENwbHRDYWxsYmFjayAgICAgIDogU1BJIFR4UnggQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgIDogU1BJIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgUnhIYWxmQ3BsdENhbGxiYWNrICAgIDogU1BJIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgVHhSeEhhbGZDcGx0Q2FsbGJhY2sgIDogU1BJIFR4UnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgOiBTUEkgRXJyb3IgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBBYm9ydENwbHRDYWxsYmFjayAgICAgOiBTUEkgQWJvcnQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgOiBTUEkgTXNwIEluaXQgY2FsbGJhY2sKLSAgICAgICAgICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgOiBTUEkgTXNwIERlSW5pdCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeENwbHRDYWxsYmFjayAgICAgICAgOiBTUEkgVHggQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFJ4Q3BsdENhbGxiYWNrICAgICAgICA6IFNQSSBSeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhSeENwbHRDYWxsYmFjayAgICAgIDogU1BJIFR4UnggQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4SGFsZkNwbHRDYWxsYmFjayAgICA6IFNQSSBUeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBSeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBTUEkgUnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhSeEhhbGZDcGx0Q2FsbGJhY2sgIDogU1BJIFR4UnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgRXJyb3JDYWxsYmFjayAgICAgICAgIDogU1BJIEVycm9yIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIEFib3J0Q3BsdENhbGxiYWNrICAgICA6IFNQSSBBYm9ydCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgOiBTUEkgTXNwIEluaXQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgIDogU1BJIE1zcCBEZUluaXQgY2FsbGJhY2sKICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgICAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIApAQCAtODQsMTcgKzg0LDE4IEBACiAgICAgICAgICAgSEFMX1NQSV9VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICAgICAgICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKLSAgICAgICAgICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgOiBTUEkgVHggQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogU1BJIFJ4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4UnhDcGx0Q2FsbGJhY2sgICAgICA6IFNQSSBUeFJ4IENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayAgICA6IFNQSSBUeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICA6IFNQSSBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjawotICAgICAgICAgICAgKCspIFR4UnhIYWxmQ3BsdENhbGxiYWNrICA6IFNQSSBUeFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgIDogU1BJIEVycm9yIGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgQWJvcnRDcGx0Q2FsbGJhY2sgICAgIDogU1BJIEFib3J0IGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogU1BJIE1zcCBJbml0IGNhbGxiYWNrCi0gICAgICAgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgIDogU1BJIE1zcCBEZUluaXQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgIDogU1BJIFR4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBSeENwbHRDYWxsYmFjayAgICAgICAgOiBTUEkgUnggQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4UnhDcGx0Q2FsbGJhY2sgICAgICA6IFNQSSBUeFJ4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBTUEkgVHggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhIYWxmQ3BsdENhbGxiYWNrICAgIDogU1BJIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIFR4UnhIYWxmQ3BsdENhbGxiYWNrICA6IFNQSSBUeFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IFNQSSBFcnJvciBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBBYm9ydENwbHRDYWxsYmFjayAgICAgOiBTUEkgQWJvcnQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwSW5pdENhbGxiYWNrICAgICAgIDogU1BJIE1zcCBJbml0IGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIE1zcERlSW5pdENhbGxiYWNrICAgICA6IFNQSSBNc3AgRGVJbml0IGNhbGxiYWNrCiAKKyAgICAgICBbLi5dCiAgICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9TUElfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfU1BJX1NUQVRFX1JFU0VUCiAgICAgICAgYWxsIGNhbGxiYWNrcyBhcmUgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIHdlYWsgZnVuY3Rpb25zOgogICAgICAgIGV4YW1wbGVzIEhBTF9TUElfTWFzdGVyVHhDcGx0Q2FsbGJhY2soKSwgSEFMX1NQSV9NYXN0ZXJSeENwbHRDYWxsYmFjaygpLgpAQCAtMTA0LDYgKzEwNSw3IEBACiAgICAgICAgSWYgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX1NQSV9Jbml0KCkvIEhBTF9TUElfRGVJbml0KCkKICAgICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpIHdoYXRldmVyIHRoZSBzdGF0ZS4KIAorICAgICAgIFsuLl0KICAgICAgICBDYWxsYmFja3MgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIGluIEhBTF9TUElfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KICAgICAgICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQKICAgICAgICBpbiBIQUxfU1BJX1NUQVRFX1JFQURZIG9yIEhBTF9TUElfU1RBVEVfUkVTRVQgc3RhdGUsCkBAIC0xMTIsNyArMTE0LDggQEAKICAgICAgICB1c2luZyBIQUxfU1BJX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfU1BJX0RlSW5pdCgpCiAgICAgICAgb3IgSEFMX1NQSV9Jbml0KCkgZnVuY3Rpb24uCiAKLSAgICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9QUFBfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCisgICAgICAgWy4uXQorICAgICAgIFdoZW4gdGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1BQUF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKICAgICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdGVyaW5nIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZQogICAgICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCiAKQEAgLTE4NCw3ICsxODcsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3NwaV9leC5jIGIvU3JjL3N0bTMyZzR4eF9oYWxfc3BpX2V4LmMKaW5kZXggZGU0YTE0Zi4uMThkZTA2YiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfc3BpX2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfc3BpX2V4LmMKQEAgLTEwLDcgKzEwLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF9zcmFtLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF9zcmFtLmMKaW5kZXggYWMxOGRhZS4uMjQ5ZDkwNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfc3JhbS5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3NyYW0uYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfdGltLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF90aW0uYwppbmRleCA3YjQwMjY5Li41OGFhM2U2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF90aW0uYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF90aW0uYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNDk2LDExICs0OTYsMTEgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkpCisgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpKQorICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTk0OCwxMSArOTQ4LDExIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0xNTI3LDExICsxNTI3LDExIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0yMDc1LDExICsyMDc1LDExIEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0NDX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0yOTg2LDExICsyOTg2LDExIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0NDX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoKChwRGF0YTEgPT0gTlVMTCkgfHwgKHBEYXRhMiA9PSBOVUxMKSkpICYmIChMZW5ndGggPiAwVSkpCiAgICAgewpAQCAtMzgwNSw2ICszODA1LDEwIEBACiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMSBzZWxlY3RlZAogICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyIHNlbGVjdGVkCisgICogQG5vdGUgIFRvIG91dHB1dCBhIHdhdmVmb3JtIHdpdGggYSBtaW5pbXVtIGRlbGF5IHVzZXIgY2FuIGVuYWJsZSB0aGUgZmFzdAorICAqICAgICAgICBtb2RlIGJ5IGNhbGxpbmcgdGhlIEByZWYgX19IQUxfVElNX0VOQUJMRV9PQ3hGQVNUIG1hY3JvLiBUaGVuIENDeAorICAqICAgICAgICBvdXRwdXQgaXMgZm9yY2VkIGluIHJlc3BvbnNlIHRvIHRoZSBlZGdlIGRldGVjdGlvbiBvbiBUSXggaW5wdXQsCisgICogICAgICAgIHdpdGhvdXQgdGFraW5nIGluIGFjY291bnQgdGhlIGNvbXBhcmlzb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX0NvbmZpZ0NoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICBUSU1fT25lUHVsc2VfSW5pdFR5cGVEZWYgKnNDb25maWcsCkBAIC00MDIxLDExICs0MDI1LDExIEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0xFTkdUSChCdXJzdExlbmd0aCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9EQVRBX0xFTkdUSChEYXRhTGVuZ3RoKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoQnVyc3RCdWZmZXIgPT0gTlVMTCkgJiYgKEJ1cnN0TGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTQzNTMsMTEgKzQzNTcsMTEgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfTEVOR1RIKEJ1cnN0TGVuZ3RoKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0RBVEFfTEVOR1RIKERhdGFMZW5ndGgpKTsKIAotICBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkpCisgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpKQorICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYgKChCdXJzdEJ1ZmZlciA9PSBOVUxMKSAmJiAoQnVyc3RMZW5ndGggPiAwVSkpCiAgICAgewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfdGltX2V4LmMgYi9TcmMvc3RtMzJnNHh4X2hhbF90aW1fZXguYwppbmRleCAwMzExYWRjLi5hNmE1MDU3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF90aW1fZXguYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF90aW1fZXguYwpAQCAtNzEsNyArNzEsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTQxNSwxMSArNDE1LDExIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSEFMTF9TRU5TT1JfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKLSAgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpKQorICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKSkKKyAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoKHVpbnQzMl90KXBEYXRhID09IDBVKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTc0NiwxMSArNzQ2LDExIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmICgoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKSkKKyAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkpCisgIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCiAgIHsKICAgICBpZiAoKCh1aW50MzJfdClwRGF0YSA9PSAwVSkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0xMjAxLDExICsxMjAxLDExIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmICgoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKSkKKyAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkpCisgIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCiAgIHsKICAgICBpZiAoKCh1aW50MzJfdClwRGF0YSA9PSAwVSkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC0xODk4LDYgKzE4OTgsOSBAQAogICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCiAgICogQHBhcmFtICBzQnJlYWtEZWFkVGltZUNvbmZpZyBwb2ludGVyIHRvIGEgVElNX0NvbmZpZ0JyZWFrRGVhZENvbmZpZ1R5cGVEZWYgc3RydWN0dXJlIHRoYXQKICAgKiAgICAgICAgIGNvbnRhaW5zIHRoZSBCRFRSIFJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gIGluZm9ybWF0aW9uIGZvciB0aGUgVElNIHBlcmlwaGVyYWwuCisgICogQG5vdGUgICBJbnRlcnJ1cHRzIGNhbiBiZSBnZW5lcmF0ZWQgd2hlbiBhbiBhY3RpdmUgbGV2ZWwgaXMgZGV0ZWN0ZWQgb24gdGhlCisgICogICAgICAgICBicmVhayBpbnB1dCwgdGhlIGJyZWFrIDIgaW5wdXQgb3IgdGhlIHN5c3RlbSBicmVhayBpbnB1dC4gQnJlYWsKKyAgKiAgICAgICAgIGludGVycnVwdCBjYW4gYmUgZW5hYmxlZCBieSBjYWxsaW5nIHRoZSBAcmVmIF9fSEFMX1RJTV9FTkFCTEVfSVQgbWFjcm8uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfQ29uZmlnQnJlYWtEZWFkVGltZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKQEAgLTE5ODgsMTAgKzE5OTEsMTAgQEAKIAogewogICB1aW50MzJfdCB0bXBvcng7Ci0gIHVpbnQzMl90IGJraW5fZW5hYmxlX21hc2sgPSAwVTsKLSAgdWludDMyX3QgYmtpbl9wb2xhcml0eV9tYXNrID0gMFU7Ci0gIHVpbnQzMl90IGJraW5fZW5hYmxlX2JpdHBvcyA9IDBVOwotICB1aW50MzJfdCBia2luX3BvbGFyaXR5X2JpdHBvcyA9IDBVOworICB1aW50MzJfdCBia2luX2VuYWJsZV9tYXNrOworICB1aW50MzJfdCBia2luX3BvbGFyaXR5X21hc2s7CisgIHVpbnQzMl90IGJraW5fZW5hYmxlX2JpdHBvczsKKyAgdWludDMyX3QgYmtpbl9wb2xhcml0eV9iaXRwb3M7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9CUkVBS19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwpAQCAtMjA1MSw2ICsyMDU0LDggQEAKICAgICAgIGJraW5fZW5hYmxlX21hc2sgPSBUSU0xX0FGMV9CS0NNUDVFOwogICAgICAgYmtpbl9lbmFibGVfYml0cG9zID0gVElNMV9BRjFfQktDTVA1RV9Qb3M7CiAgICAgICAvKiBObyBwYWxhcml0eSBiaXQgZm9yIHRoaXMgQ09NUC4gVmFyaWFibGUgYmtpbl9wb2xhcml0eV9tYXNrIGtlZXBzIGl0cyBkZWZhdWx0IHZhbHVlIDAgKi8KKyAgICAgIGJraW5fcG9sYXJpdHlfbWFzayA9IDBVOworICAgICAgYmtpbl9wb2xhcml0eV9iaXRwb3MgPSAwVTsKICAgICAgIGJyZWFrOwogICAgIH0KICNlbmRpZiAvKiBDT01QNSAqLwpAQCAtMjA2MCw2ICsyMDY1LDggQEAKICAgICAgIGJraW5fZW5hYmxlX21hc2sgPSBUSU0xX0FGMV9CS0NNUDZFOwogICAgICAgYmtpbl9lbmFibGVfYml0cG9zID0gVElNMV9BRjFfQktDTVA2RV9Qb3M7CiAgICAgICAvKiBObyBwYWxhcml0eSBiaXQgZm9yIHRoaXMgQ09NUC4gVmFyaWFibGUgYmtpbl9wb2xhcml0eV9tYXNrIGtlZXBzIGl0cyBkZWZhdWx0IHZhbHVlIDAgKi8KKyAgICAgIGJraW5fcG9sYXJpdHlfbWFzayA9IDBVOworICAgICAgYmtpbl9wb2xhcml0eV9iaXRwb3MgPSAwVTsKICAgICAgIGJyZWFrOwogICAgIH0KICNlbmRpZiAvKiBDT01QNyAqLwpAQCAtMjA2OSwxMiArMjA3NiwyMCBAQAogICAgICAgYmtpbl9lbmFibGVfbWFzayA9IFRJTTFfQUYxX0JLQ01QN0U7CiAgICAgICBia2luX2VuYWJsZV9iaXRwb3MgPSBUSU0xX0FGMV9CS0NNUDdFX1BvczsKICAgICAgIC8qIE5vIHBhbGFyaXR5IGJpdCBmb3IgdGhpcyBDT01QLiBWYXJpYWJsZSBia2luX3BvbGFyaXR5X21hc2sga2VlcHMgaXRzIGRlZmF1bHQgdmFsdWUgMCAqLworICAgICAgYmtpbl9wb2xhcml0eV9tYXNrID0gMFU7CisgICAgICBia2luX3BvbGFyaXR5X2JpdHBvcyA9IDBVOwogICAgICAgYnJlYWs7CiAgICAgfQogI2VuZGlmIC8qIENPTVA3ICovCiAKICAgICBkZWZhdWx0OgorICAgIHsKKyAgICAgIGJraW5fZW5hYmxlX21hc2sgPSAwVTsKKyAgICAgIGJraW5fcG9sYXJpdHlfbWFzayA9IDBVOworICAgICAgYmtpbl9lbmFibGVfYml0cG9zID0gMFU7CisgICAgICBia2luX3BvbGFyaXR5X2JpdHBvcyA9IDBVOwogICAgICAgYnJlYWs7CisgICAgfQogICB9CiAKICAgc3dpdGNoIChCcmVha0lucHV0KQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYwppbmRleCA3Y2Q2ZGYwLi44ZWU2ZGRjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYwpAQCAtMjcsNyArMjcsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3VhcnQuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3VhcnQuYwppbmRleCBjMjgwOTc0Li45YmIwZWQ2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF91YXJ0LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfdWFydC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0xMDE1LDEzICsxMDE1LDE2IEBACiAKIC8qKgogICAqIEBicmllZiBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBwcm92aWRlZCB0aHJvdWdoIHBEYXRhLgogICAqIEBub3RlIFdoZW4gRklGTyBtb2RlIGlzIGVuYWJsZWQsIHdyaXRpbmcgYSBkYXRhIGluIHRoZSBURFIgcmVnaXN0ZXIgYWRkcyBvbmUKICAgKiAgICAgICBkYXRhIHRvIHRoZSBUWEZJRk8uIFdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIFREUiByZWdpc3RlciBhcmUgcGVyZm9ybWVkCiAgICogICAgICAgd2hlbiBUWEZORiBmbGFnIGlzIHNldC4gRnJvbSBoYXJkd2FyZSBwZXJzcGVjdGl2ZSwgVFhGTkYgZmxhZyBhbmQKICAgKiAgICAgICBUWEUgYXJlIG1hcHBlZCBvbiB0aGUgc2FtZSBiaXQtZmllbGQuCiAgICogQHBhcmFtIGh1YXJ0ICAgVUFSVCBoYW5kbGUuCi0gICogQHBhcmFtIHBEYXRhICAgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSAgICBBbW91bnQgb2YgZGF0YSB0byBiZSBzZW50LgorICAqIEBwYXJhbSBwRGF0YSAgIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gU2l6ZSAgICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50LgogICAqIEBwYXJhbSBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC0xMTAxLDEzICsxMTA0LDE2IEBACiAKIC8qKgogICAqIEBicmllZiBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCiAgICogQG5vdGUgV2hlbiBGSUZPIG1vZGUgaXMgZW5hYmxlZCwgdGhlIFJYRk5FIGZsYWcgaXMgc2V0IGFzIGxvbmcgYXMgdGhlIFJYRklGTwogICAqICAgICAgIGlzIG5vdCBlbXB0eS4gUmVhZCBvcGVyYXRpb25zIGZyb20gdGhlIFJEUiByZWdpc3RlciBhcmUgcGVyZm9ybWVkIHdoZW4KICAgKiAgICAgICBSWEZORSBmbGFnIGlzIHNldC4gRnJvbSBoYXJkd2FyZSBwZXJzcGVjdGl2ZSwgUlhGTkUgZmxhZyBhbmQKICAgKiAgICAgICBSWE5FIGFyZSBtYXBwZWQgb24gdGhlIHNhbWUgYml0LWZpZWxkLgogICAqIEBwYXJhbSBodWFydCAgIFVBUlQgaGFuZGxlLgotICAqIEBwYXJhbSBwRGF0YSAgIFBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCi0gICogQHBhcmFtIFNpemUgICAgQW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQuCisgICogQHBhcmFtIHBEYXRhICAgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplICAgIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHJlY2VpdmVkLgogICAqIEBwYXJhbSBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC0xMTg4LDkgKzExOTQsMTIgQEAKIAogLyoqCiAgICogQGJyaWVmIFNlbmQgYW4gYW1vdW50IG9mIGRhdGEgaW4gaW50ZXJydXB0IG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBwcm92aWRlZCB0aHJvdWdoIHBEYXRhLgogICAqIEBwYXJhbSBodWFydCBVQVJUIGhhbmRsZS4KLSAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSAgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudC4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfVHJhbnNtaXRfSVQoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0xMjU5LDkgKzEyNjgsMTIgQEAKIAogLyoqCiAgICogQGJyaWVmIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gaW50ZXJydXB0IG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCiAgICogQHBhcmFtIGh1YXJ0IFVBUlQgaGFuZGxlLgotICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSBTaXplICBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZC4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSByZWNlaXZlZC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VQVJUX1JlY2VpdmVfSVQoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCwgdWludDhfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0xMzM3LDkgKzEzNDksMTIgQEAKIAogLyoqCiAgICogQGJyaWVmIFNlbmQgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBwcm92aWRlZCB0aHJvdWdoIHBEYXRhLgogICAqIEBwYXJhbSBodWFydCBVQVJUIGhhbmRsZS4KLSAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSAgQW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudC4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VBUlRfVHJhbnNtaXRfRE1BKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMTQxMCw5ICsxNDI1LDEyIEBACiAgICogQGJyaWVmIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCiAgICogQG5vdGUgICBXaGVuIHRoZSBVQVJUIHBhcml0eSBpcyBlbmFibGVkIChQQ0UgPSAxKSwgdGhlIHJlY2VpdmVkIGRhdGEgY29udGFpbgogICAqICAgICAgICAgdGhlIHBhcml0eSBiaXQgKE1TQiBwb3NpdGlvbikuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSByZWNlaXZlZCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcERhdGEuCiAgICogQHBhcmFtIGh1YXJ0IFVBUlQgaGFuZGxlLgotICAqIEBwYXJhbSBwRGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSBTaXplICBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZC4KKyAgKiBAcGFyYW0gcERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSBTaXplICBBbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSByZWNlaXZlZC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VQVJUX1JlY2VpdmVfRE1BKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQpAQCAtMjczNSw2ICsyNzUzLDcgQEAKICAgdWludDMyX3QgdXNhcnRkaXYgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwVTsKICAgSEFMX1N0YXR1c1R5cGVEZWYgcmV0ICAgICAgICAgICAgICAgPSBIQUxfT0s7CiAgIHVpbnQzMl90IGxwdWFydF9rZXJfY2tfcHJlcyAgICAgICAgID0gMHgwMDAwMDAwMFU7CisgIHVpbnQzMl90IHBjbGs7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1VBUlRfQkFVRFJBVEUoaHVhcnQtPkluaXQuQmF1ZFJhdGUpKTsKQEAgLTI4MTEsNyArMjgzMCw2IEBACiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfTFNFOgogICAgICAgICBscHVhcnRfa2VyX2NrX3ByZXMgPSAoKHVpbnQzMl90KUxTRV9WQUxVRSAvIFVBUlRfR0VUX0RJVl9GQUNUT1IoaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOgogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKQEAgLTI4MzEsMTggKzI4NDksMTkgQEAKICAgICAgICAgc3dpdGNoIChjbG9ja3NvdXJjZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9QQ0xLMToKLSAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQoSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKKyAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfSFNJOgogICAgICAgICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVBUlRfRElWX0xQVUFSVChIU0lfVkFMVUUsIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX1NZU0NMSzoKLSAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQoSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgICAgICBwY2xrID0gSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKTsKKyAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfTFNFOgogICAgICAgICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVBUlRfRElWX0xQVUFSVChMU0VfVkFMVUUsIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDoKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yODY2LDIxICsyODg1LDIzIEBACiAgICAgc3dpdGNoIChjbG9ja3NvdXJjZSkKICAgICB7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE6Ci0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgoSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsxRnJlcSgpOworICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkc4KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9QQ0xLMjoKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOChIQUxfUkNDX0dldFBDTEsyRnJlcSgpLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKKyAgICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7CisgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0hTSToKICAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOChIU0lfVkFMVUUsIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9TWVNDTEs6Ci0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgoSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpOworICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkc4KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9MU0U6CiAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgoKHVpbnQzMl90KUxTRV9WQUxVRSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX1VOREVGSU5FRDoKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldCA9IEhBTF9FUlJPUjsKICAgICAgICAgYnJlYWs7CkBAIC0yOTAzLDIxICsyOTI0LDIzIEBACiAgICAgc3dpdGNoIChjbG9ja3NvdXJjZSkKICAgICB7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE6Ci0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzE2KEhBTF9SQ0NfR2V0UENMSzFGcmVxKCksIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOworICAgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKKyAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX1BDTEsyOgotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkcxNihIQUxfUkNDX0dldFBDTEsyRnJlcSgpLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKKyAgICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzJGcmVxKCk7CisgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzE2KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9IU0k6CiAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzE2KEhTSV9WQUxVRSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX1NZU0NMSzoKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYoSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpOworICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkcxNihwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfTFNFOgogICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkcxNigodWludDMyX3QpTFNFX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfVU5ERUZJTkVEOgogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfaGFsX3VhcnRfZXguYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3VhcnRfZXguYwppbmRleCA0OWQxOTgxLi44MTgyMDM5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2hhbF91YXJ0X2V4LmMKKysrIGIvU3JjL3N0bTMyZzR4eF9oYWxfdWFydF9leC5jCkBAIC0yOSw3ICsyOSw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfdXNhcnQuYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3VzYXJ0LmMKaW5kZXggMmRiNmNkNy4uYzk0NDlkOCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfdXNhcnQuYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF91c2FydC5jCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC03MzQsOSArNzM0LDEyIEBACiAKIC8qKgogICAqIEBicmllZiAgU2ltcGxleCBzZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBwcm92aWRlZCB0aHJvdWdoIHBUeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgVVNBUlQgaGFuZGxlLgotICAqIEBwYXJhbSAgcFR4RGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSAgU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSBzZW50LgorICAqIEBwYXJhbSAgcFR4RGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplIEFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQuCiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC04MjcsMTAgKzgzMCwxMyBAQAogCiAvKioKICAgKiBAYnJpZWYgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlLgotICAqIEBub3RlIFRvIHJlY2VpdmUgc3luY2hyb25vdXMgZGF0YSwgZHVtbXkgZGF0YSBhcmUgc2ltdWx0YW5lb3VzbHkgdHJhbnNtaXR0ZWQuCisgICogQG5vdGUgICBUbyByZWNlaXZlIHN5bmNocm9ub3VzIGRhdGEsIGR1bW15IGRhdGEgYXJlIHNpbXVsdGFuZW91c2x5IHRyYW5zbWl0dGVkLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBSeERhdGEuCiAgICogQHBhcmFtIGh1c2FydCBVU0FSVCBoYW5kbGUuCi0gICogQHBhcmFtIHBSeERhdGEgUG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gU2l6ZSBBbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZC4KKyAgKiBAcGFyYW0gcFJ4RGF0YSBQb2ludGVyIHRvIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtIFNpemUgQW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgcmVjZWl2ZWQuCiAgICogQHBhcmFtIFRpbWVvdXQgVGltZW91dCBkdXJhdGlvbi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTkzNiwxMCArOTQyLDEzIEBACiAKIC8qKgogICAqIEBicmllZiBGdWxsLUR1cGxleCBTZW5kIGFuZCBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUuCisgICogQG5vdGUgICBXaGVuIFVBUlQgcGFyaXR5IGlzIG5vdCBlbmFibGVkIChQQ0UgPSAwKSwgYW5kIFdvcmQgTGVuZ3RoIGlzIGNvbmZpZ3VyZWQgdG8gOSBiaXRzIChNMS1NMCA9IDAxKSwKKyAgKiAgICAgICAgIHRoZSBzZW50IGRhdGEgYW5kIHRoZSByZWNlaXZlZCBkYXRhIGFyZSBoYW5kbGVkIGFzIHNldHMgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgYXZhaWxhYmxlIHRocm91Z2ggcFR4RGF0YSBhbmQgdGhyb3VnaCBwUnhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0IFVTQVJUIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBUeERhdGEgcG9pbnRlciB0byBUWCBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gIHBSeERhdGEgcG9pbnRlciB0byBSWCBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gIFNpemUgYW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudCAoc2FtZSBhbW91bnQgdG8gYmUgcmVjZWl2ZWQpLgorICAqIEBwYXJhbSAgcFR4RGF0YSBwb2ludGVyIHRvIFRYIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBwUnhEYXRhIHBvaW50ZXIgdG8gUlggZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gIFNpemUgYW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgc2VudCAoc2FtZSBhbW91bnQgdG8gYmUgcmVjZWl2ZWQpLgogICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMTA4Miw5ICsxMDkxLDEyIEBACiAKIC8qKgogICAqIEBicmllZiAgU2VuZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBpbnRlcnJ1cHQgbW9kZS4KKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHNlbnQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IHByb3ZpZGVkIHRocm91Z2ggcFR4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCBVU0FSVCBoYW5kbGUuCi0gICogQHBhcmFtICBwVHhEYXRhIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCi0gICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQuCisgICogQHBhcmFtICBwVHhEYXRhIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gIFNpemUgYW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgc2VudC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VU0FSVF9UcmFuc21pdF9JVChVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIHVpbnQ4X3QgKnBUeERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0xMTYxLDEwICsxMTczLDEzIEBACiAKIC8qKgogICAqIEBicmllZiBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGludGVycnVwdCBtb2RlLgotICAqIEBub3RlICBUbyByZWNlaXZlIHN5bmNocm9ub3VzIGRhdGEsIGR1bW15IGRhdGEgYXJlIHNpbXVsdGFuZW91c2x5IHRyYW5zbWl0dGVkLgorICAqIEBub3RlICAgVG8gcmVjZWl2ZSBzeW5jaHJvbm91cyBkYXRhLCBkdW1teSBkYXRhIGFyZSBzaW11bHRhbmVvdXNseSB0cmFuc21pdHRlZC4KKyAgKiBAbm90ZSAgIFdoZW4gVUFSVCBwYXJpdHkgaXMgbm90IGVuYWJsZWQgKFBDRSA9IDApLCBhbmQgV29yZCBMZW5ndGggaXMgY29uZmlndXJlZCB0byA5IGJpdHMgKE0xLU0wID0gMDEpLAorICAqICAgICAgICAgdGhlIHJlY2VpdmVkIGRhdGEgaXMgaGFuZGxlZCBhcyBhIHNldCBvZiB1MTYuIEluIHRoaXMgY2FzZSwgU2l6ZSBtdXN0IGluZGljYXRlIHRoZSBudW1iZXIKKyAgKiAgICAgICAgIG9mIHUxNiBhdmFpbGFibGUgdGhyb3VnaCBwUnhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0IFVTQVJUIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBSeERhdGEgcG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gIFNpemUgYW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQuCisgICogQHBhcmFtICBwUnhEYXRhIHBvaW50ZXIgdG8gZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gIFNpemUgYW1vdW50IG9mIGRhdGEgZWxlbWVudHMgKHU4IG9yIHUxNikgdG8gYmUgcmVjZWl2ZWQuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfUmVjZWl2ZV9JVChVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIHVpbnQ4X3QgKnBSeERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0xMjYyLDEwICsxMjc3LDEzIEBACiAKIC8qKgogICAqIEBicmllZiBGdWxsLUR1cGxleCBTZW5kIGFuZCBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIGludGVycnVwdCBtb2RlLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgc2VudCBkYXRhIGFuZCB0aGUgcmVjZWl2ZWQgZGF0YSBhcmUgaGFuZGxlZCBhcyBzZXRzIG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBUeERhdGEgYW5kIHRocm91Z2ggcFJ4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCBVU0FSVCBoYW5kbGUuCi0gICogQHBhcmFtICBwVHhEYXRhIHBvaW50ZXIgdG8gVFggZGF0YSBidWZmZXIuCi0gICogQHBhcmFtICBwUnhEYXRhIHBvaW50ZXIgdG8gUlggZGF0YSBidWZmZXIuCi0gICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIHRvIGJlIHNlbnQgKHNhbWUgYW1vdW50IHRvIGJlIHJlY2VpdmVkKS4KKyAgKiBAcGFyYW0gIHBUeERhdGEgcG9pbnRlciB0byBUWCBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgcFJ4RGF0YSBwb2ludGVyIHRvIFJYIGRhdGEgYnVmZmVyICh1OCBvciB1MTYgZGF0YSBlbGVtZW50cykuCisgICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIGVsZW1lbnRzICh1OCBvciB1MTYpIHRvIGJlIHNlbnQgKHNhbWUgYW1vdW50IHRvIGJlIHJlY2VpdmVkKS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VU0FSVF9UcmFuc21pdFJlY2VpdmVfSVQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCB1aW50OF90ICpwVHhEYXRhLCB1aW50OF90ICpwUnhEYXRhLApAQCAtMTM1OCw5ICsxMzc2LDEyIEBACiAKIC8qKgogICAqIEBicmllZiBTZW5kIGFuIGFtb3VudCBvZiBkYXRhIGluIERNQSBtb2RlLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgc2VudCBkYXRhIGlzIGhhbmRsZWQgYXMgYSBzZXQgb2YgdTE2LiBJbiB0aGlzIGNhc2UsIFNpemUgbXVzdCBpbmRpY2F0ZSB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiB1MTYgcHJvdmlkZWQgdGhyb3VnaCBwVHhEYXRhLgogICAqIEBwYXJhbSAgaHVzYXJ0IFVTQVJUIGhhbmRsZS4KLSAgKiBAcGFyYW0gIHBUeERhdGEgcG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KLSAgKiBAcGFyYW0gIFNpemUgYW1vdW50IG9mIGRhdGEgdG8gYmUgc2VudC4KKyAgKiBAcGFyYW0gIHBUeERhdGEgcG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSBhbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSBzZW50LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1RyYW5zbWl0X0RNQShVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIHVpbnQ4X3QgKnBUeERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0xNDM5LDEwICsxNDYwLDEzIEBACiAgICogQGJyaWVmIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gRE1BIG1vZGUuCiAgICogQG5vdGUgICBXaGVuIHRoZSBVU0FSVCBwYXJpdHkgaXMgZW5hYmxlZCAoUENFID0gMSksIHRoZSByZWNlaXZlZCBkYXRhIGNvbnRhaW4KICAgKiAgICAgICAgIHRoZSBwYXJpdHkgYml0IChNU0IgcG9zaXRpb24pLgotICAqIEBub3RlIFRoZSBVU0FSVCBETUEgdHJhbnNtaXQgY2hhbm5lbCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIGNsb2NrIGZvciB0aGUgc2xhdmUuCisgICogQG5vdGUgICBUaGUgVVNBUlQgRE1BIHRyYW5zbWl0IGNoYW5uZWwgbXVzdCBiZSBjb25maWd1cmVkIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjbG9jayBmb3IgdGhlIHNsYXZlLgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBoYW5kbGVkIGFzIGEgc2V0IG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBSeERhdGEuCiAgICogQHBhcmFtICBodXNhcnQgVVNBUlQgaGFuZGxlLgotICAqIEBwYXJhbSAgcFJ4RGF0YSBwb2ludGVyIHRvIGRhdGEgYnVmZmVyLgotICAqIEBwYXJhbSAgU2l6ZSBhbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZC4KKyAgKiBAcGFyYW0gIHBSeERhdGEgcG9pbnRlciB0byBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSBhbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSByZWNlaXZlZC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VU0FSVF9SZWNlaXZlX0RNQShVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIHVpbnQ4X3QgKnBSeERhdGEsIHVpbnQxNl90IFNpemUpCkBAIC0xNTUzLDEwICsxNTc3LDEzIEBACiAvKioKICAgKiBAYnJpZWYgRnVsbC1EdXBsZXggVHJhbnNtaXQgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZS4KICAgKiBAbm90ZSAgIFdoZW4gdGhlIFVTQVJUIHBhcml0eSBpcyBlbmFibGVkIChQQ0UgPSAxKSB0aGUgZGF0YSByZWNlaXZlZCBjb250YWluIHRoZSBwYXJpdHkgYml0LgorICAqIEBub3RlICAgV2hlbiBVQVJUIHBhcml0eSBpcyBub3QgZW5hYmxlZCAoUENFID0gMCksIGFuZCBXb3JkIExlbmd0aCBpcyBjb25maWd1cmVkIHRvIDkgYml0cyAoTTEtTTAgPSAwMSksCisgICogICAgICAgICB0aGUgc2VudCBkYXRhIGFuZCB0aGUgcmVjZWl2ZWQgZGF0YSBhcmUgaGFuZGxlZCBhcyBzZXRzIG9mIHUxNi4gSW4gdGhpcyBjYXNlLCBTaXplIG11c3QgaW5kaWNhdGUgdGhlIG51bWJlcgorICAqICAgICAgICAgb2YgdTE2IGF2YWlsYWJsZSB0aHJvdWdoIHBUeERhdGEgYW5kIHRocm91Z2ggcFJ4RGF0YS4KICAgKiBAcGFyYW0gIGh1c2FydCBVU0FSVCBoYW5kbGUuCi0gICogQHBhcmFtICBwVHhEYXRhIHBvaW50ZXIgdG8gVFggZGF0YSBidWZmZXIuCi0gICogQHBhcmFtICBwUnhEYXRhIHBvaW50ZXIgdG8gUlggZGF0YSBidWZmZXIuCi0gICogQHBhcmFtICBTaXplIGFtb3VudCBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkL3NlbnQuCisgICogQHBhcmFtICBwVHhEYXRhIHBvaW50ZXIgdG8gVFggZGF0YSBidWZmZXIgKHU4IG9yIHUxNiBkYXRhIGVsZW1lbnRzKS4KKyAgKiBAcGFyYW0gIHBSeERhdGEgcG9pbnRlciB0byBSWCBkYXRhIGJ1ZmZlciAodTggb3IgdTE2IGRhdGEgZWxlbWVudHMpLgorICAqIEBwYXJhbSAgU2l6ZSBhbW91bnQgb2YgZGF0YSBlbGVtZW50cyAodTggb3IgdTE2KSB0byBiZSByZWNlaXZlZC9zZW50LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1RyYW5zbWl0UmVjZWl2ZV9ETUEoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCB1aW50OF90ICpwVHhEYXRhLCB1aW50OF90ICpwUnhEYXRhLApAQCAtMjgxMiw2ICsyODM5LDcgQEAKICAgSEFMX1N0YXR1c1R5cGVEZWYgcmV0ICAgICAgICAgICAgICAgID0gSEFMX09LOwogICB1aW50MTZfdCBicnJ0ZW1wOwogICB1aW50MzJfdCB1c2FydGRpdiAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOworICB1aW50MzJfdCBwY2xrOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19VU0FSVF9QT0xBUklUWShodXNhcnQtPkluaXQuQ0xLUG9sYXJpdHkpKTsKQEAgLTI4NTgsMTYgKzI4ODYsMTkgQEAKICAgc3dpdGNoIChjbG9ja3NvdXJjZSkKICAgewogICAgIGNhc2UgVVNBUlRfQ0xPQ0tTT1VSQ0VfUENMSzE6Ci0gICAgICB1c2FydGRpdiA9ICh1aW50MzJfdCkoVVNBUlRfRElWX1NBTVBMSU5HOChIQUxfUkNDX0dldFBDTEsxRnJlcSgpLCBodXNhcnQtPkluaXQuQmF1ZFJhdGUsIGh1c2FydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOworICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzFGcmVxKCk7CisgICAgICB1c2FydGRpdiA9ICh1aW50MzJfdCkoVVNBUlRfRElWX1NBTVBMSU5HOChwY2xrLCBodXNhcnQtPkluaXQuQmF1ZFJhdGUsIGh1c2FydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBVU0FSVF9DTE9DS1NPVVJDRV9QQ0xLMjoKLSAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVU0FSVF9ESVZfU0FNUExJTkc4KEhBTF9SQ0NfR2V0UENMSzJGcmVxKCksIGh1c2FydC0+SW5pdC5CYXVkUmF0ZSwgaHVzYXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMkZyZXEoKTsKKyAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVU0FSVF9ESVZfU0FNUExJTkc4KHBjbGssIGh1c2FydC0+SW5pdC5CYXVkUmF0ZSwgaHVzYXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICBicmVhazsKICAgICBjYXNlIFVTQVJUX0NMT0NLU09VUkNFX0hTSToKICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVU0FSVF9ESVZfU0FNUExJTkc4KEhTSV9WQUxVRSwgaHVzYXJ0LT5Jbml0LkJhdWRSYXRlLCBodXNhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgVVNBUlRfQ0xPQ0tTT1VSQ0VfU1lTQ0xLOgotICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVTQVJUX0RJVl9TQU1QTElORzgoSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSwgaHVzYXJ0LT5Jbml0LkJhdWRSYXRlLCBodXNhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKKyAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpOworICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVTQVJUX0RJVl9TQU1QTElORzgocGNsaywgaHVzYXJ0LT5Jbml0LkJhdWRSYXRlLCBodXNhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgVVNBUlRfQ0xPQ0tTT1VSQ0VfTFNFOgogICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVTQVJUX0RJVl9TQU1QTElORzgoTFNFX1ZBTFVFLCBodXNhcnQtPkluaXQuQmF1ZFJhdGUsIGh1c2FydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9oYWxfdXNhcnRfZXguYyBiL1NyYy9zdG0zMmc0eHhfaGFsX3VzYXJ0X2V4LmMKaW5kZXggZDFhMmI5Mi4uNmRhNzViZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfdXNhcnRfZXguYworKysgYi9TcmMvc3RtMzJnNHh4X2hhbF91c2FydF9leC5jCkBAIC0yOCw3ICsyOCw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNTQsMTEgKzU0LDE3IEBACiAjaWZkZWYgSEFMX1VTQVJUX01PRFVMRV9FTkFCTEVECiAKIC8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIFVTQVJURXhfUHJpdmF0ZV9Db25zdGFudHMgVVNBUlRFeCBQcml2YXRlIENvbnN0YW50cworICAqIEB7CisgICovCiAvKiBVQVJUIFJYIEZJRk8gZGVwdGggKi8KICNkZWZpbmUgUlhfRklGT19ERVBUSCA4VQogCiAvKiBVQVJUIFRYIEZJRk8gZGVwdGggKi8KICNkZWZpbmUgVFhfRklGT19ERVBUSCA4VQorLyoqCisgICogQH0KKyAgKi8KIAogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2hhbF93d2RnLmMgYi9TcmMvc3RtMzJnNHh4X2hhbF93d2RnLmMKaW5kZXggNzgwN2ZmMC4uOTJmOGVjNSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9oYWxfd3dkZy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfaGFsX3d3ZGcuYwpAQCAtMzIsMTcgKzMyLDE5IEBACiAgICAgICAgICgrKykgbWluIHRpbWUgKG1TKSA9IDEwMDAgKiAoQ291bnRlciAtIFdpbmRvdykgLyBXV0RHIGNsb2NrCiAgICAgICAgICgrKykgbWF4IHRpbWUgKG1TKSA9IDEwMDAgKiAoQ291bnRlciAtIDB4NDApIC8gV1dERyBjbG9jawogICAgICgrKSBUeXBpY2FsIHZhbHVlczoKLSAgICAgICAgKCsrKSBDb3VudGVyIG1pbiAoVFs1OzBdID0gMHgwMCkgQDU2IE1IeihQQ0xLMSkgd2l0aCB6ZXJvIHByZXNjYWxlcjoKLSAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IH43My4xNCC1cwotICAgICAgICAoKyspIENvdW50ZXIgbWF4IChUWzU7MF0gPSAweDNGKSBANTYgTUh6KFBDTEsxKSB3aXRoIHByZXNjYWxlciBkaXZpZGluZyBieSAxMjg6Ci0gICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiB+NTk5LjE4IG1zCisgICAgICAgICgrKykgQ291bnRlciBtaW4gKFRbNTswXSA9IDB4MDApIEA1Nk1IeiAoUENMSzEpIHdpdGggemVybyBwcmVzY2FsZXI6CisgICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiB+NzMuMTS1cworICAgICAgICAoKyspIENvdW50ZXIgbWF4IChUWzU7MF0gPSAweDNGKSBANTZNSHogKFBDTEsxKSB3aXRoIHByZXNjYWxlciBkaXZpZGluZyBieSAxMjg6CisgICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiB+NTk5LjE4bXMKIAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIFsuLl0KKwogICAgICoqKiBDb21tb24gZHJpdmVyIHVzYWdlICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIFsuLl0KICAgICAoKykgRW5hYmxlIFdXREcgQVBCMSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfV1dER19DTEtfRU5BQkxFKCkuCiAgICAgKCspIFNldCB0aGUgV1dERyBwcmVzY2FsZXIsIHJlZnJlc2ggd2luZG93IGFuZCBjb3VudGVyIHZhbHVlCiAgICAgICAgIHVzaW5nIEhBTF9XV0RHX0luaXQoKSBmdW5jdGlvbi4KQEAgLTU5LDkgKzYxLDEwIEBACiAgICAgICAgIEhBTF9XV0RHX1JlZnJlc2goKSBmdW5jdGlvbi4gVGhpcyBvcGVyYXRpb24gbXVzdCBvY2N1ciBvbmx5IHdoZW4KICAgICAgICAgdGhlIGNvdW50ZXIgaXMgbG93ZXIgdGhhbiB0aGUgcmVmcmVzaCB3aW5kb3cgdmFsdWUgYWxyZWFkeSBwcm9ncmFtbWVkLgogCi0gIFsuLl0KICAgICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgWy4uXQogICAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfV1dER19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMSBhbGxvd3MKICAgICB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuIFVzZSBGdW5jdGlvbnMKICAgICBAcmVmIEhBTF9XV0RHX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCkBAIC04MCwxMyArODMsMTUgQEAKICAgICAgICAgKCsrKSBFd2lDYWxsYmFjayA6IGNhbGxiYWNrIGZvciAgRWFybHkgV2FrZVVwIEludGVycnVwdC4KICAgICAgICAgKCsrKSBNc3BJbml0Q2FsbGJhY2sgOiBXV0RHIE1zcEluaXQuCiAKKyAgICBbLi5dCiAgICAgV2hlbiBjYWxsaW5nIEByZWYgSEFMX1dXREdfSW5pdCBmdW5jdGlvbiwgY2FsbGJhY2tzIGFyZSByZXNldCB0byB0aGUKLSAgICBjb3JyZXNwb25kaW5nIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnM6IAorICAgIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczoKICAgICBAcmVmIEhBTF9XV0RHX0Vhcmx5V2FrZXVwQ2FsbGJhY2soKSBhbmQgSEFMX1dXREdfTXNwSW5pdCgpIG9ubHkgaWYgdGhleSBoYXZlCiAgICAgbm90IGJlZW4gcmVnaXN0ZXJlZCBiZWZvcmUuCiAKKyAgICBbLi5dCiAgICAgV2hlbiBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9XV0RHX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgotICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIAorICAgIG5vdCBkZWZpbmVkLCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJpbmcgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlCiAgICAgYW5kIHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrcyBhcmUgdXNlZC4KIAogICAgICoqKiBXV0RHIEhBTCBkcml2ZXIgbWFjcm9zIGxpc3QgKioqCkBAIC0xMDIsNyArMTA3LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0xMzgsOCArMTQzLDggQEAKICAgKi8KIAogLyoqIEBkZWZncm91cCBXV0RHX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCi0gKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucy4KLSAqCisgICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMuCisgICoKIEB2ZXJiYXRpbQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAjIyMjIyBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKQEAgLTE3OCwxMiArMTgzLDEyIEBACiAKICNpZiAoVVNFX0hBTF9XV0RHX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICAvKiBSZXNldCBDYWxsYmFjayBwb2ludGVycyAqLwotICBpZihod3dkZy0+RXdpQ2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKGh3d2RnLT5Fd2lDYWxsYmFjayA9PSBOVUxMKQogICB7CiAgICAgaHd3ZGctPkV3aUNhbGxiYWNrID0gSEFMX1dXREdfRWFybHlXYWtldXBDYWxsYmFjazsKICAgfQogCi0gIGlmKGh3d2RnLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgaWYgKGh3d2RnLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIGh3d2RnLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfV1dER19Nc3BJbml0OwogICB9CkBAIC0yNDIsMTMgKzI0NywxMyBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAKLSAgaWYocENhbGxiYWNrID09IE5VTEwpCisgIGlmIChwQ2FsbGJhY2sgPT0gTlVMTCkKICAgewogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQogICBlbHNlCiAgIHsKLSAgICBzd2l0Y2goQ2FsbGJhY2tJRCkKKyAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCiAgICAgewogICAgICAgY2FzZSBIQUxfV1dER19FV0lfQ0JfSUQ6CiAgICAgICAgIGh3d2RnLT5Fd2lDYWxsYmFjayA9IHBDYWxsYmFjazsKQEAgLTI3MCw3ICsyNzUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYSBXV0RHIENhbGxiYWNrCi0gICogICAgICAgICBXV0RHIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sgCisgICogICAgICAgICBXV0RHIENhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgKHN1cmNoYXJnZWQpIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gIGh3d2RnIFdXREcgaGFuZGxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMjgyLDcgKzI4Nyw3IEBACiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAotICBzd2l0Y2goQ2FsbGJhY2tJRCkKKyAgc3dpdGNoIChDYWxsYmFja0lEKQogICB7CiAgICAgY2FzZSBIQUxfV1dER19FV0lfQ0JfSUQ6CiAgICAgICBod3dkZy0+RXdpQ2FsbGJhY2sgPSBIQUxfV1dER19FYXJseVdha2V1cENhbGxiYWNrOwpAQCAtMzA2LDggKzMxMSw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgV1dER19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKLSAqICBAYnJpZWYgICAgSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucwotICoKKyAgKiAgQGJyaWVmICAgIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMKKyAgKgogQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICMjIyMjIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfbGxfYWRjLmMgYi9TcmMvc3RtMzJnNHh4X2xsX2FkYy5jCmluZGV4IDBkYzdiNTEuLjUzMWI3ZDggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfYWRjLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9sbF9hZGMuYwpAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC0xNzIsMTMgKzE3MiwxNCBAQAogICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKLSNlbGlmIGRlZmluZWQoU1RNMzJHNDczeHgpCisjZWxpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogI2RlZmluZSBJU19MTF9BRENfUkVHX1RSSUdfU09VUkNFKF9fQURDX0lOU1RBTkNFX18sIF9fUkVHX1RSSUdfU09VUkNFX18pICAgICAgIFwKICAgKCAgICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX1NPRlRXQVJFKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNMV9UUkdPKSAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTFfVFJHTzIpICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU0xX0NIMykgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNMl9UUkdPKSAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTJfQ0gyKSAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU0zX1RSR08pICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNNF9UUkdPKSAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTZfVFJHTykgICAgICAgICAgICAgICAgIFwKQEAgLTIxMyw3ICsyMTQsNDQgQEAKICAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICApCi0jZWxpZiBkZWZpbmVkKFNUTTMyR0JLMUNCKSB8fCBkZWZpbmVkKFNUTTMyRzQzMXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ0MXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3MXh4KQorI2VsaWYgZGVmaW5lZChTVE0zMkc0NzF4eCkKKyNkZWZpbmUgSVNfTExfQURDX1JFR19UUklHX1NPVVJDRShfX0FEQ19JTlNUQU5DRV9fLCBfX1JFR19UUklHX1NPVVJDRV9fKSAgICAgICBcCisgICggICAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19TT0ZUV0FSRSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTFfVFJHTykgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU0xX1RSR08yKSAgICAgICAgICAgICAgICBcCisgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNMV9DSDMpICAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTJfVFJHTykgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU0yX0NIMikgICAgICAgICAgICAgICAgICBcCisgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNM19UUkdPKSAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTRfVFJHTykgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU02X1RSR08pICAgICAgICAgICAgICAgICBcCisgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNN19UUkdPKSAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTThfVFJHTykgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU04X1RSR08yKSAgICAgICAgICAgICAgICBcCisgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNMTVfVFJHTykgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX0xQVElNX09VVCkgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoKChfX0FEQ19JTlNUQU5DRV9fKSA9PSBBREMxKSB8fCAoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzIpKSAgICAgICAgICBcCisgICAgICAgJiYgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTFfQ0gxKSAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU0xX0NIMikgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNMl9DSDIpICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTNfQ0g0KSAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU00X0NINCkgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfRVhUSV9MSU5FMTEpICAgICAgICAgXAorICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB8fCAoKChfX0FEQ19JTlNUQU5DRV9fKSA9PSBBREMzKSBcCisgICAgICAgJiYgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTJfQ0gxKSAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU0yX0NIMykgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfVElNM19DSDEpICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfRVhUX1RJTTRfQ0gxKSAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU04X0NIMSkgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fUkVHX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19SRUdfVFJJR19FWFRfRVhUSV9MSU5FMikgICAgICAgICAgXAorICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICkKKyNlbGlmIGRlZmluZWQoU1RNMzJHQksxQ0IpIHx8IGRlZmluZWQoU1RNMzJHNDMxeHgpIHx8IGRlZmluZWQoU1RNMzJHNDQxeHgpCiAjZGVmaW5lIElTX0xMX0FEQ19SRUdfVFJJR19TT1VSQ0UoX19BRENfSU5TVEFOQ0VfXywgX19SRUdfVFJJR19TT1VSQ0VfXykgICAgICAgXAogICAoICAgKChfX1JFR19UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfUkVHX1RSSUdfU09GVFdBUkUpICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHx8ICgoX19SRUdfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX1JFR19UUklHX0VYVF9USU0xX1RSR08pICAgICAgICAgICAgICAgICBcCkBAIC0zMzYsNyArMzc0LDcgQEAKICAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICApCi0jZWxpZiBkZWZpbmVkKFNUTTMyRzQ3M3h4KQorI2VsaWYgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICNkZWZpbmUgSVNfTExfQURDX0lOSl9UUklHX1NPVVJDRShfX0FEQ19JTlNUQU5DRV9fLCBfX0lOSl9UUklHX1NPVVJDRV9fKSAgICAgICBcCiAgICggICAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19TT0ZUV0FSRSkgICAgICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX1RJTTFfVFJHTykgICAgICAgICAgICAgICAgIFwKQEAgLTM3Niw3ICs0MTQsNDMgQEAKICAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICApCi0jZWxpZiBkZWZpbmVkKFNUTTMyR0JLMUNCKSB8fCBkZWZpbmVkKFNUTTMyRzQzMXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ0MXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3MXh4KQorI2VsaWYgZGVmaW5lZChTVE0zMkc0NzF4eCkKKyNkZWZpbmUgSVNfTExfQURDX0lOSl9UUklHX1NPVVJDRShfX0FEQ19JTlNUQU5DRV9fLCBfX0lOSl9UUklHX1NPVVJDRV9fKSAgICAgICBcCisgICggICAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19TT0ZUV0FSRSkgICAgICAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX1RJTTFfVFJHTykgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9USU0xX1RSR08yKSAgICAgICAgICAgICAgICBcCisgICB8fCAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfVElNMV9DSDQpICAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX1RJTTJfVFJHTykgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9USU0zX1RSR08pICAgICAgICAgICAgICAgICBcCisgICB8fCAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfVElNNF9UUkdPKSAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX1RJTTZfVFJHTykgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9USU03X1RSR08pICAgICAgICAgICAgICAgICBcCisgICB8fCAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfVElNOF9UUkdPKSAgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX1RJTThfVFJHTzIpICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9USU04X0NINCkgICAgICAgICAgICAgICAgICBcCisgICB8fCAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfVElNMTVfVFJHTykgICAgICAgICAgICAgICAgXAorICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX0xQVElNX09VVCkgICAgICAgICAgICAgICAgIFwKKyAgIHx8ICgoKChfX0FEQ19JTlNUQU5DRV9fKSA9PSBBREMxKSB8fCAoKF9fQURDX0lOU1RBTkNFX18pID09IEFEQzIpKSAgICAgICAgICBcCisgICAgICAgJiYgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX1RJTTJfQ0gxKSAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9USU0zX0NIMSkgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfVElNM19DSDMpICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX1RJTTNfQ0g0KSAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9USU0xNl9DSDEpICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfRVhUSV9MSU5FMTUpICAgICAgICAgXAorICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB8fCAoKCgoX19BRENfSU5TVEFOQ0VfXykgPT0gQURDMykpIFwKKyAgICAgICAmJiAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfVElNMV9DSDMpICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX1RJTTRfQ0gzKSAgICAgICAgICAgIFwKKyAgICAgICAgIHx8ICgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX0VYVF9USU00X0NINCkgICAgICAgICAgICBcCisgICAgICAgICB8fCAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfVElNOF9DSDIpICAgICAgICAgICAgXAorICAgICAgICAgfHwgKChfX0lOSl9UUklHX1NPVVJDRV9fKSA9PSBMTF9BRENfSU5KX1RSSUdfRVhUX0VYVElfTElORTMpICAgICAgICAgIFwKKyAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICApCisjZWxpZiBkZWZpbmVkKFNUTTMyR0JLMUNCKSB8fCBkZWZpbmVkKFNUTTMyRzQzMXh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ0MXh4KQogI2RlZmluZSBJU19MTF9BRENfSU5KX1RSSUdfU09VUkNFKF9fQURDX0lOU1RBTkNFX18sIF9fSU5KX1RSSUdfU09VUkNFX18pICAgICAgIFwKICAgKCAgICgoX19JTkpfVFJJR19TT1VSQ0VfXykgPT0gTExfQURDX0lOSl9UUklHX1NPRlRXQVJFKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICB8fCAoKF9fSU5KX1RSSUdfU09VUkNFX18pID09IExMX0FEQ19JTkpfVFJJR19FWFRfVElNMV9UUkdPKSAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF9jb21wLmMgYi9TcmMvc3RtMzJnNHh4X2xsX2NvbXAuYwppbmRleCA4MGQxNDM5Li45ZGMwZWNjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2xsX2NvbXAuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX2NvbXAuYwpAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC01Nyw3ICs1Nyw3IEBACiAgICggICAoKF9fSU5QVVRfUExVU19fKSA9PSBMTF9DT01QX0lOUFVUX1BMVVNfSU8xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfHwgKChfX0lOUFVUX1BMVVNfXykgPT0gTExfQ09NUF9JTlBVVF9QTFVTX0lPMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKQotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICNkZWZpbmUgSVNfTExfQ09NUF9JTlBVVF9NSU5VUyhfX0NPTVBfSU5TVEFOQ0VfXywgX19JTlBVVF9NSU5VU19fKSAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgKCgoX19JTlBVVF9NSU5VU19fKSA9PSBMTF9DT01QX0lOUFVUX01JTlVTXzFfNFZSRUZJTlQpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgKChfX0lOUFVUX01JTlVTX18pID09IExMX0NPTVBfSU5QVVRfTUlOVVNfMV8yVlJFRklOVCkgIHx8IFwKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgfHwgKChfX1BPTEFSSVRZX18pID09IExMX0NPTVBfT1VUUFVUUE9MX0lOVkVSVEVEKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKQogCi0jaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkKKyNpZiBkZWZpbmVkKFNUTTMyRzQ3NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4NHh4KSB8fCBkZWZpbmVkKFNUTTMyRzQ3M3h4KSB8fCBkZWZpbmVkKFNUTTMyRzQ4M3h4KQogI2RlZmluZSBJU19MTF9DT01QX09VVFBVVF9CTEFOS0lOR19TT1VSQ0UoX19JTlNUQU5DRV9fLCBfX09VVFBVVF9CTEFOS0lOR19TT1VSQ0VfXykgIFwKICAgICAgKCgoKF9fSU5TVEFOQ0VfXykgPT0gQ09NUDEpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAoKChfX09VVFBVVF9CTEFOS0lOR19TT1VSQ0VfXykgPT0gTExfQ09NUF9CTEFOS0lOR1NSQ19OT05FKSAgICAgICAgICAgIHx8ICAgICAgXApAQCAtMjIyLDExICsyMjIsNiBAQAogICAgICAgfHwgKChfX09VVFBVVF9CTEFOS0lOR19TT1VSQ0VfXykgPT0gTExfQ09NUF9CTEFOS0lOR1NSQ19USU00X09DMykgICAgICAgICAgICAgIFwKICAgICAgICkKICNlbmRpZgotI2RlZmluZSBJU19MTF9DT01QX0RFR0xJVENIRVJfTU9ERShfX0lOU1RBTkNFX18sIF9fREVHTElUQ0hFUl9fKSAgICAgICAgICAgICAgIFwKLSAgKCAgICgoX19ERUdMSVRDSEVSX18pID09IExMX0NPTVBfREVHTElUQ0hFUl9ESVNBQkxFRCkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICB8fCAoKF9fREVHTElUQ0hFUl9fKSA9PSBMTF9DT01QX0RFR0xJVENIRVJfRU5BQkxFRCkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICApCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC0zMDIsNyArMjk3LDYgQEAKICAgYXNzZXJ0X3BhcmFtKElTX0xMX0NPTVBfSU5QVVRfSFlTVEVSRVNJUyhDT01QX0luaXRTdHJ1Y3QtPklucHV0SHlzdGVyZXNpcykpOwogICBhc3NlcnRfcGFyYW0oSVNfTExfQ09NUF9PVVRQVVRfUE9MQVJJVFkoQ09NUF9Jbml0U3RydWN0LT5PdXRwdXRQb2xhcml0eSkpOwogICBhc3NlcnRfcGFyYW0oSVNfTExfQ09NUF9PVVRQVVRfQkxBTktJTkdfU09VUkNFKENPTVB4LCBDT01QX0luaXRTdHJ1Y3QtPk91dHB1dEJsYW5raW5nU291cmNlKSk7Ci0gIGFzc2VydF9wYXJhbShJU19MTF9DT01QX0RFR0xJVENIRVJfTU9ERShDT01QeCwgQ09NUF9Jbml0U3RydWN0LT5EZWdsaXRjaGVyTW9kZSkpOwogCiAgIC8qIE5vdGU6IEhhcmR3YXJlIGNvbnN0cmFpbnQgKHJlZmVyIHRvIGRlc2NyaXB0aW9uIG9mIHRoaXMgZnVuY3Rpb24pICAgICAgICAqLwogICAvKiAgICAgICBDT01QIGluc3RhbmNlIG11c3Qgbm90IGJlIGxvY2tlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTMxNCw3ICszMDgsNiBAQAogICAgIC8qICAtIElucHV0SHlzdGVyZXNpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgLSBPdXRwdXRQb2xhcml0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogIC0gT3V0cHV0QmxhbmtpbmdTb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIC8qICAtIERlZ2xpdGNoZXJNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBNT0RJRllfUkVHKENPTVB4LT5DU1IsCiAgICAgICAgICAgICAgICBDT01QX0NTUl9JTlBTRUwKICAgICAgICAgICAgICAgIHwgQ09NUF9DU1JfU0NBTEVOCkBAIC0zMjMsMTQgKzMxNiwxMiBAQAogICAgICAgICAgICAgICAgfCBDT01QX0NTUl9IWVNUCiAgICAgICAgICAgICAgICB8IENPTVBfQ1NSX1BPTEFSSVRZCiAgICAgICAgICAgICAgICB8IENPTVBfQ1NSX0JMQU5LSU5HCi0gICAgICAgICAgICAgICB8IENPTVBfQ1NSX0RFR0xJVENIRU4KICAgICAgICAgICAgICAgICwKICAgICAgICAgICAgICAgIENPTVBfSW5pdFN0cnVjdC0+SW5wdXRQbHVzCiAgICAgICAgICAgICAgICB8IENPTVBfSW5pdFN0cnVjdC0+SW5wdXRNaW51cwogICAgICAgICAgICAgICAgfCBDT01QX0luaXRTdHJ1Y3QtPklucHV0SHlzdGVyZXNpcwogICAgICAgICAgICAgICAgfCBDT01QX0luaXRTdHJ1Y3QtPk91dHB1dFBvbGFyaXR5CiAgICAgICAgICAgICAgICB8IENPTVBfSW5pdFN0cnVjdC0+T3V0cHV0QmxhbmtpbmdTb3VyY2UKLSAgICAgICAgICAgICAgIHwgQ09NUF9Jbml0U3RydWN0LT5EZWdsaXRjaGVyTW9kZQogICAgICAgICAgICAgICApOwogCiAgIH0KQEAgLTM1Nyw3ICszNDgsNiBAQAogICBDT01QX0luaXRTdHJ1Y3QtPklucHV0SHlzdGVyZXNpcyAgICAgID0gTExfQ09NUF9IWVNURVJFU0lTX05PTkU7CiAgIENPTVBfSW5pdFN0cnVjdC0+T3V0cHV0UG9sYXJpdHkgICAgICAgPSBMTF9DT01QX09VVFBVVFBPTF9OT05JTlZFUlRFRDsKICAgQ09NUF9Jbml0U3RydWN0LT5PdXRwdXRCbGFua2luZ1NvdXJjZSA9IExMX0NPTVBfQkxBTktJTkdTUkNfTk9ORTsKLSAgQ09NUF9Jbml0U3RydWN0LT5EZWdsaXRjaGVyTW9kZSA9IExMX0NPTVBfREVHTElUQ0hFUl9ESVNBQkxFRDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2xsX2NyYy5jIGIvU3JjL3N0bTMyZzR4eF9sbF9jcmMuYwppbmRleCA3ZTY4NzU0Li4xZmEwNWJkIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2xsX2NyYy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfbGxfY3JjLmMKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF9kYWMuYyBiL1NyYy9zdG0zMmc0eHhfbGxfZGFjLmMKaW5kZXggNjk5Nzg0MS4uNjk4YTY5MyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF9kYWMuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX2RhYy5jCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTQ2LDcgKzQ2LDcgQEAKIC8qKiBAYWRkdG9ncm91cCBEQUNfTExfUHJpdmF0ZV9NYWNyb3MKICAgKiBAewogICAqLwotI2lmIGRlZmluZWQoU1RNMzJHNDc0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDg0eHgpIHx8IGRlZmluZWQoU1RNMzJHNDczeHgpCisjaWYgZGVmaW5lZChTVE0zMkc0NzR4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODR4eCkgfHwgZGVmaW5lZChTVE0zMkc0NzN4eCkgfHwgZGVmaW5lZChTVE0zMkc0ODN4eCkKICNkZWZpbmUgSVNfTExfREFDX0NIQU5ORUwoX19EQUNYX18sIF9fREFDX0NIQU5ORUxfXykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgoKF9fREFDWF9fKSA9PSBEQUMyKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKChfX0RBQ19DSEFOTkVMX18pID09IExMX0RBQ19DSEFOTkVMXzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzY1LDcgKzM2NSw2IEBACiAgICAgICAgICAgICAgICAgICkgPDwgKERBQ19DaGFubmVsICYgREFDX0NSX0NIWF9CSVRPRkZTRVRfTUFTSykKICAgICAgICAgICAgICAgICApOwogICAgIH0KLQogICAgIE1PRElGWV9SRUcoREFDeC0+TUNSLAogICAgICAgICAgICAgICAgKERBQ19NQ1JfTU9ERTFfMQogICAgICAgICAgICAgICAgIHwgREFDX01DUl9NT0RFMV8wCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2xsX2RtYS5jIGIvU3JjL3N0bTMyZzR4eF9sbF9kbWEuYwppbmRleCA3OGEzNDA1Li4wOGZhYjQ5IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2xsX2RtYS5jCisrKyBiL1NyYy9zdG0zMmc0eHhfbGxfZG1hLmMKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF9leHRpLmMgYi9TcmMvc3RtMzJnNHh4X2xsX2V4dGkuYwppbmRleCA2OWU5N2JiLi5hNzc3ZTY1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2xsX2V4dGkuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX2V4dGkuYwpAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2xsX2ZtYWMuYyBiL1NyYy9zdG0zMmc0eHhfbGxfZm1hYy5jCmluZGV4IDQ1NWU5YmQuLjJhZDY3ODcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfZm1hYy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfbGxfZm1hYy5jCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfbGxfZm1jLmMgYi9TcmMvc3RtMzJnNHh4X2xsX2ZtYy5jCmluZGV4IDM5ZWM1MmIuLjEyNDM5ZmUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfZm1jLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9sbF9mbWMuYwpAQCAtNDEsNyArNDEsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfbGxfZ3Bpby5jIGIvU3JjL3N0bTMyZzR4eF9sbF9ncGlvLmMKaW5kZXggNmY1MjBhNy4uMmQ0NmRjYyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF9ncGlvLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9sbF9ncGlvLmMKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF9ocnRpbS5jIGIvU3JjL3N0bTMyZzR4eF9sbF9ocnRpbS5jCmluZGV4IGE3NmFmNTkuLjM3NGU4NzggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfaHJ0aW0uYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX2hydGltLmMKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF9pMmMuYyBiL1NyYy9zdG0zMmc0eHhfbGxfaTJjLmMKaW5kZXggMGM0OGNkNS4uNjBjM2M4NSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF9pMmMuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX2kyYy5jCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfbGxfbHB0aW0uYyBiL1NyYy9zdG0zMmc0eHhfbGxfbHB0aW0uYwppbmRleCBlNzdmNTA4Li5hMDRhNDU4IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2xsX2xwdGltLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9sbF9scHRpbS5jCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF9scHVhcnQuYyBiL1NyYy9zdG0zMmc0eHhfbGxfbHB1YXJ0LmMKaW5kZXggYTA2M2IwZC4uN2IxNTY0YSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF9scHVhcnQuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX2xwdWFydC5jCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfbGxfb3BhbXAuYyBiL1NyYy9zdG0zMmc0eHhfbGxfb3BhbXAuYwppbmRleCA3NjM5MmRkLi43NTBmZTliIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2xsX29wYW1wLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9sbF9vcGFtcC5jCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfbGxfcHdyLmMgYi9TcmMvc3RtMzJnNHh4X2xsX3B3ci5jCmluZGV4IGU5MjBlZTEuLjBlMDJiYjggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfcHdyLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9sbF9wd3IuYwpAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2xsX3JjYy5jIGIvU3JjL3N0bTMyZzR4eF9sbF9yY2MuYwppbmRleCA0OTUwZGM0Li41N2Y0NDJkIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJnNHh4X2xsX3JjYy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfbGxfcmNjLmMKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTggU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF9ybmcuYyBiL1NyYy9zdG0zMmc0eHhfbGxfcm5nLmMKaW5kZXggODAxNmE3OS4uM2FiMTY4NyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF9ybmcuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX3JuZy5jCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE4IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfbGxfcnRjLmMgYi9TcmMvc3RtMzJnNHh4X2xsX3J0Yy5jCmluZGV4IGE0ZDU4MzguLmYwMzE2ZWIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfcnRjLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9sbF9ydGMuYwpAQCAtODUsMTggKzg1LDcgQEAKIAogI2RlZmluZSBJU19MTF9SVENfREFZKF9fREFZX18pICAgICgoKF9fREFZX18pID49ICh1aW50MzJfdCkxVSkgJiYgKChfX0RBWV9fKSA8PSAodWludDMyX3QpMzFVKSkKIAotI2RlZmluZSBJU19MTF9SVENfTU9OVEgoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX1JUQ19NT05USF9KQU5VQVJZKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX01PTlRIX0ZFQlJVQVJZKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX01PTlRIX01BUkNIKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX01PTlRIX0FQUklMKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX01PTlRIX01BWSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JUQ19NT05USF9KVU5FKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX01PTlRIX0pVTFkpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SVENfTU9OVEhfQVVHVVNUKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX01PTlRIX1NFUFRFTUJFUikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JUQ19NT05USF9PQ1RPQkVSKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX01PTlRIX05PVkVNQkVSKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUlRDX01PTlRIX0RFQ0VNQkVSKSkKKyNkZWZpbmUgSVNfTExfUlRDX01PTlRIKF9fTU9OVEhfXykgKCgoX19NT05USF9fKSA+PSAxVSkgJiYgKChfX01PTlRIX18pIDw9IDEyVSkpCiAKICNkZWZpbmUgSVNfTExfUlRDX1lFQVIoX19ZRUFSX18pICgoX19ZRUFSX18pIDw9IDk5VSkKIApAQCAtMzk0LDcgKzM4Myw3IEBACiAKICAgaWYgKChSVENfRm9ybWF0ID09IExMX1JUQ19GT1JNQVRfQklOKSAmJiAoKFJUQ19EYXRlU3RydWN0LT5Nb250aCAmIDB4MTBVKSA9PSAweDEwVSkpCiAgIHsKLSAgICBSVENfRGF0ZVN0cnVjdC0+TW9udGggPSAodWludDhfdCkoUlRDX0RhdGVTdHJ1Y3QtPk1vbnRoICYgKHVpbnQzMl90KX4oMHgxMFUpKSArIDB4MEFVOworICAgIFJUQ19EYXRlU3RydWN0LT5Nb250aCA9ICh1aW50OF90KShSVENfRGF0ZVN0cnVjdC0+TW9udGggJiAodWludDhfdCl+KDB4MTBVKSkgKyAweDBBVTsKICAgfQogICBpZiAoUlRDX0Zvcm1hdCA9PSBMTF9SVENfRk9STUFUX0JJTikKICAgewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF9zcGkuYyBiL1NyYy9zdG0zMmc0eHhfbGxfc3BpLmMKaW5kZXggNTUxYmJlOS4uNjhlNjNjMiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF9zcGkuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX3NwaS5jCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmc0eHhfbGxfdGltLmMgYi9TcmMvc3RtMzJnNHh4X2xsX3RpbS5jCmluZGV4IDBmY2Y2ZDguLmUzZTVmNDkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfdGltLmMKKysrIGIvU3JjL3N0bTMyZzR4eF9sbF90aW0uYwpAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCkBAIC03MTQsOSArNzE0LDkgQEAKICAgKiAgYW5kIERUR1s3OjBdIGNhbiBiZSB3cml0ZS1sb2NrZWQgZGVwZW5kaW5nIG9uIHRoZSBMT0NLIGNvbmZpZ3VyYXRpb24sIGl0CiAgICogIGNhbiBiZSBuZWNlc3NhcnkgdG8gY29uZmlndXJlIGFsbCBvZiB0aGVtIGR1cmluZyB0aGUgZmlyc3Qgd3JpdGUgYWNjZXNzIHRvCiAgICogIHRoZSBUSU14X0JEVFIgcmVnaXN0ZXIuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQlJFQUtfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgYnJlYWsgaW5wdXQuCi0gICogQG5vdGUgTWFjcm8gQHJlZiBJU19USU1fQktJTjJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSBNYWNybyBJU19USU1fQktJTjJfSU5TVEFOQ0UoVElNeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICBhIHRpbWVyIGluc3RhbmNlIHByb3ZpZGVzIGEgc2Vjb25kIGJyZWFrIGlucHV0LgogICAqIEBwYXJhbSAgVElNeCBUaW1lciBJbnN0YW5jZQogICAqIEBwYXJhbSAgVElNX0JEVFJJbml0U3RydWN0IHBvaW50ZXIgdG8gYSBAcmVmIExMX1RJTV9CRFRSX0luaXRUeXBlRGVmIHN0cnVjdHVyZSAoQnJlYWsgYW5kIERlYWQgVGltZSBjb25maWd1cmF0aW9uIGRhdGEgc3RydWN0dXJlKQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF91c2FydC5jIGIvU3JjL3N0bTMyZzR4eF9sbF91c2FydC5jCmluZGV4IDVhOGQ2ZWMuLjkxMTY1NGQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmc0eHhfbGxfdXNhcnQuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX3VzYXJ0LmMKQEAgLTYsNyArNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtNDEsMTQgKzQxLDYgQEAKIC8qIFByaXZhdGUgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAYWRkdG9ncm91cCBVU0FSVF9MTF9Qcml2YXRlX0NvbnN0YW50cwotICAqIEB7Ci0gICovCi0KLS8qKgotICAqIEB9Ci0gICovCi0KIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgVVNBUlRfTExfUHJpdmF0ZV9NYWNyb3MKICAgKiBAewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyZzR4eF9sbF91c2IuYyBiL1NyYy9zdG0zMmc0eHhfbGxfdXNiLmMKaW5kZXggNzZiNGUxZi4uZjJjZWY1YSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF91c2IuYworKysgYi9TcmMvc3RtMzJnNHh4X2xsX3VzYi5jCkBAIC0yNiw3ICsyNiw3IEBACiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqIEBhdHRlbnRpb24KICAgKgotICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTkgU1RNaWNyb2VsZWN0cm9uaWNzLgogICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KICAgKgogICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLApAQCAtODAwLDE2ICs4MDAsMTYgQEAKICAgdWludDMyX3QgbiA9ICgodWludDMyX3Qpd05CeXRlcyArIDFVKSA+PiAxOwogICB1aW50MzJfdCBCYXNlQWRkciA9ICh1aW50MzJfdClVU0J4OwogICB1aW50MzJfdCBpLCB0ZW1wMSwgdGVtcDI7Ci0gIHVpbnQxNl90ICpwZHdWYWw7CisgIF9fSU8gdWludDE2X3QgKnBkd1ZhbDsKICAgdWludDhfdCAqcEJ1ZiA9IHBiVXNyQnVmOwogCi0gIHBkd1ZhbCA9ICh1aW50MTZfdCAqKShCYXNlQWRkciArIDB4NDAwVSArICgodWludDMyX3Qpd1BNQUJ1ZkFkZHIgKiBQTUFfQUNDRVNTKSk7CisgIHBkd1ZhbCA9IChfX0lPIHVpbnQxNl90ICopKEJhc2VBZGRyICsgMHg0MDBVICsgKCh1aW50MzJfdCl3UE1BQnVmQWRkciAqIFBNQV9BQ0NFU1MpKTsKIAogICBmb3IgKGkgPSBuOyBpICE9IDBVOyBpLS0pCiAgIHsKLSAgICB0ZW1wMSA9ICh1aW50MTZfdCkgKiBwQnVmOworICAgIHRlbXAxID0gKnBCdWY7CiAgICAgcEJ1ZisrOwotICAgIHRlbXAyID0gdGVtcDEgfCAoKHVpbnQxNl90KSgodWludDE2X3QpICogcEJ1ZiA8PCA4KSk7CisgICAgdGVtcDIgPSB0ZW1wMSB8ICgodWludDE2X3QpKCh1aW50MTZfdCkgKnBCdWYgPDwgOCkpOwogICAgICpwZHdWYWwgPSAodWludDE2X3QpdGVtcDI7CiAgICAgcGR3VmFsKys7CiAKQEAgLTgzNCwxNCArODM0LDE0IEBACiAgIHVpbnQzMl90IG4gPSAodWludDMyX3Qpd05CeXRlcyA+PiAxOwogICB1aW50MzJfdCBCYXNlQWRkciA9ICh1aW50MzJfdClVU0J4OwogICB1aW50MzJfdCBpLCB0ZW1wOwotICB1aW50MTZfdCAqcGR3VmFsOworICBfX0lPIHVpbnQxNl90ICpwZHdWYWw7CiAgIHVpbnQ4X3QgKnBCdWYgPSBwYlVzckJ1ZjsKIAotICBwZHdWYWwgPSAodWludDE2X3QgKikoQmFzZUFkZHIgKyAweDQwMFUgKyAoKHVpbnQzMl90KXdQTUFCdWZBZGRyICogUE1BX0FDQ0VTUykpOworICBwZHdWYWwgPSAoX19JTyB1aW50MTZfdCAqKShCYXNlQWRkciArIDB4NDAwVSArICgodWludDMyX3Qpd1BNQUJ1ZkFkZHIgKiBQTUFfQUNDRVNTKSk7CiAKICAgZm9yIChpID0gbjsgaSAhPSAwVTsgaS0tKQogICB7Ci0gICAgdGVtcCA9ICpwZHdWYWw7CisgICAgdGVtcCA9ICooX19JTyB1aW50MTZfdCAqKXBkd1ZhbDsKICAgICBwZHdWYWwrKzsKICAgICAqcEJ1ZiA9ICh1aW50OF90KSgodGVtcCA+PiAwKSAmIDB4RkZVKTsKICAgICBwQnVmKys7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJnNHh4X2xsX3V0aWxzLmMgYi9TcmMvc3RtMzJnNHh4X2xsX3V0aWxzLmMKaW5kZXggMGYyOWZmNi4uZWE3ODk0OSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyZzR4eF9sbF91dGlscy5jCisrKyBiL1NyYy9zdG0zMmc0eHhfbGxfdXRpbHMuYwpAQCAtNiw3ICs2LDcgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCiAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICAqCiAgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCg==