{ "name": "ZeroCouponBond", "structs": { "AccountInfo": [ { "name": "payment_address", "type": "address" }, { "name": "units", "type": "uint64" }, { "name": "unit_value", "type": "uint64" }, { "name": "paid_coupons", "type": "uint64" }, { "name": "suspended", "type": "bool" } ], "AssetInfo": [ { "name": "denomination_asset_id", "type": "uint64" }, { "name": "settlement_asset_id", "type": "uint64" }, { "name": "outstanding_principal", "type": "uint64" }, { "name": "unit_value", "type": "uint64" }, { "name": "day_count_convention", "type": "uint8" }, { "name": "interest_rate", "type": "uint16" }, { "name": "total_supply", "type": "uint64" }, { "name": "circulating_supply", "type": "uint64" }, { "name": "primary_distribution_opening_date", "type": "uint64" }, { "name": "primary_distribution_closure_date", "type": "uint64" }, { "name": "issuance_date", "type": "uint64" }, { "name": "maturity_date", "type": "uint64" }, { "name": "suspended", "type": "bool" }, { "name": "performance", "type": "uint8" } ], "AssetMetadata": [ { "name": "contract_type", "type": "uint8" }, { "name": "calendar", "type": "uint8" }, { "name": "business_day_convention", "type": "uint8" }, { "name": "end_of_month_convention", "type": "uint8" }, { "name": "prepayment_effect", "type": "uint8" }, { "name": "penalty_type", "type": "uint8" }, { "name": "prospectus_hash", "type": "byte[32]" }, { "name": "prospectus_url", "type": "string" } ], "CurrentUnitsValue": [ { "name": "units_value", "type": "uint64" }, { "name": "accrued_interest", "type": "uint64" }, { "name": "day_count_factor", "type": "DayCountFactor" } ], "DayCountFactor": [ { "name": "numerator", "type": "uint64" }, { "name": "denominator", "type": "uint64" } ], "PaymentAmounts": [ { "name": "interest", "type": "uint64" }, { "name": "principal", "type": "uint64" } ], "PaymentResult": [ { "name": "amount", "type": "uint64" }, { "name": "timestamp", "type": "uint64" }, { "name": "context", "type": "byte[]" } ], "RoleConfig": [ { "name": "role_validity_start", "type": "uint64" }, { "name": "role_validity_end", "type": "uint64" } ], "SecondaryMarketSchedule": [ { "name": "secondary_market_opening_date", "type": "uint64" }, { "name": "secondary_market_closure_date", "type": "uint64" } ] }, "methods": [ { "name": "asset_transfer", "args": [ { "type": "address", "name": "sender_holding_address", "desc": "Sender Account Holding Address" }, { "type": "address", "name": "receiver_holding_address", "desc": "Receiver Account Holding Address" }, { "type": "uint64", "name": "units", "desc": "Amount of D-ASA units to transfer" } ], "returns": { "type": "uint64", "desc": "Transferred actualized value in denomination asset" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Transfer D-ASA units between accounts", "events": [], "recommendations": {} }, { "name": "pay_principal", "args": [ { "type": "address", "name": "holding_address", "desc": "Account Holding Address" }, { "type": "byte[]", "name": "payment_info", "desc": "Additional payment information (Optional)" } ], "returns": { "type": "(uint64,uint64,byte[])", "struct": "PaymentResult", "desc": "Paid amount in denomination asset, Payment timestamp, Payment context" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Pay the outstanding principal and interest to an account", "events": [], "recommendations": {} }, { "name": "get_account_units_current_value", "args": [ { "type": "address", "name": "holding_address", "desc": "Account Holding Address" }, { "type": "uint64", "name": "units", "desc": "Account's units for the current value calculation" } ], "returns": { "type": "(uint64,uint64,(uint64,uint64))", "struct": "CurrentUnitsValue", "desc": "Units current value in denomination asset, Accrued interest in denomination asset" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get account's units current value and accrued interest", "events": [], "recommendations": {} }, { "name": "get_payment_amount", "args": [ { "type": "address", "name": "holding_address", "desc": "Account Holding Address" } ], "returns": { "type": "(uint64,uint64)", "struct": "PaymentAmounts", "desc": "Interest amount in denomination asset, Principal amount in denomination asset" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get the next payment amount", "events": [], "recommendations": {} }, { "name": "asset_create", "args": [ { "type": "address", "name": "arranger", "desc": "D-ASA Arranger Address" }, { "type": "(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)", "struct": "AssetMetadata", "name": "metadata", "desc": "D-ASA metadata" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "desc": "Create a new D-ASA", "events": [], "recommendations": {} }, { "name": "asset_config", "args": [ { "type": "uint64", "name": "denomination_asset_id", "desc": "Denomination asset identifier" }, { "type": "uint64", "name": "settlement_asset_id", "desc": "Settlement asset identifier" }, { "type": "uint64", "name": "principal", "desc": "Principal, expressed in denomination asset" }, { "type": "uint64", "name": "minimum_denomination", "desc": "Minimum denomination, expressed in denomination asset" }, { "type": "uint8", "name": "day_count_convention", "desc": "Day-count convention for interests calculation" }, { "type": "uint16", "name": "interest_rate", "desc": "Interest rate in bps" }, { "type": "uint16[]", "name": "coupon_rates", "desc": "Coupon interest rates in bps" }, { "type": "uint64[]", "name": "time_events", "desc": "Time events (strictly ascending order)" }, { "type": "(uint64,uint64)[]", "name": "time_periods", "desc": "Time periods of recurring time events" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Configure the Debt Algorand Standard Application", "events": [], "recommendations": {} }, { "name": "set_secondary_time_events", "args": [ { "type": "uint64[]", "name": "secondary_market_time_events", "desc": "Secondary market time events (strictly ascending order)" } ], "returns": { "type": "(uint64,uint64)", "struct": "SecondaryMarketSchedule", "desc": "Secondary Market Opening Date, Secondary Market Closure Date" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Set secondary market time schedule", "events": [], "recommendations": {} }, { "name": "assign_role", "args": [ { "type": "address", "name": "role_address", "desc": "Account Role Address" }, { "type": "uint8", "name": "role", "desc": "Role identifier" }, { "type": "byte[]", "name": "config", "desc": "Role configuration (Optional)" } ], "returns": { "type": "uint64", "desc": "Timestamp of the role assignment" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Assign a role to an address", "events": [], "recommendations": {} }, { "name": "revoke_role", "args": [ { "type": "address", "name": "role_address", "desc": "Account Role Address" }, { "type": "uint8", "name": "role", "desc": "Role identifier" } ], "returns": { "type": "uint64", "desc": "Timestamp of the role revocation" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Revoke a role from an address", "events": [], "recommendations": {} }, { "name": "open_account", "args": [ { "type": "address", "name": "holding_address", "desc": "Account Holding Address" }, { "type": "address", "name": "payment_address", "desc": "Account Payment Address" } ], "returns": { "type": "uint64", "desc": "Timestamp of the account opening" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Open D-ASA account", "events": [], "recommendations": {} }, { "name": "close_account", "args": [ { "type": "address", "name": "holding_address", "desc": "Account Holding Address" } ], "returns": { "type": "(uint64,uint64)", "desc": "Closed units, Timestamp of the account closing" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Close D-ASA account", "events": [], "recommendations": {} }, { "name": "primary_distribution", "args": [ { "type": "address", "name": "holding_address", "desc": "Account Holding Address" }, { "type": "uint64", "name": "units", "desc": "Amount of D-ASA units to distribute" } ], "returns": { "type": "uint64", "desc": "Remaining D-ASA units to be distributed" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Distribute D-ASA units to accounts according the primary market", "events": [], "recommendations": {} }, { "name": "set_asset_suspension", "args": [ { "type": "bool", "name": "suspended", "desc": "Suspension status" } ], "returns": { "type": "uint64", "desc": "Timestamp of the set asset suspension status" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Set asset suspension status", "events": [], "recommendations": {} }, { "name": "set_account_suspension", "args": [ { "type": "address", "name": "holding_address", "desc": "Account Holding Address" }, { "type": "bool", "name": "suspended", "desc": "Suspension status" } ], "returns": { "type": "uint64", "desc": "Timestamp of the set account suspension status" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Set account suspension status", "events": [], "recommendations": {} }, { "name": "set_default_status", "args": [ { "type": "bool", "name": "defaulted", "desc": "Default status" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Set D-ASA default status", "events": [], "recommendations": {} }, { "name": "get_asset_info", "args": [], "returns": { "type": "(uint64,uint64,uint64,uint64,uint8,uint16,uint64,uint64,uint64,uint64,uint64,uint64,bool,uint8)", "struct": "AssetInfo", "desc": "Denomination asset ID, Settlement asset ID, Outstanding principal, Unit nominal value, Day-count convention, Interest rate, Total supply, Circulating supply, Primary distribution opening date, Primary distribution closure date, Issuance date, Maturity date, Suspended, Performance" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get D-ASA info", "events": [], "recommendations": {} }, { "name": "get_account_info", "args": [ { "type": "address", "name": "holding_address", "desc": "Account Holding Address" } ], "returns": { "type": "(address,uint64,uint64,uint64,bool)", "struct": "AccountInfo", "desc": "Payment Address, D-ASA units, Unit nominal value in denomination asset, Paid coupons, Suspended" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get account info", "events": [], "recommendations": {} }, { "name": "get_time_events", "args": [], "returns": { "type": "uint64[]", "desc": "Time events" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get D-ASA time events", "events": [], "recommendations": {} }, { "name": "get_secondary_market_schedule", "args": [], "returns": { "type": "uint64[]", "desc": "Secondary market schedule" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get secondary market schedule", "events": [], "recommendations": {} }, { "name": "get_asset_metadata", "args": [], "returns": { "type": "(uint8,uint8,uint8,uint8,uint8,uint8,byte[32],string)", "struct": "AssetMetadata", "desc": "Contract type, Calendar, Business day convention, End of month convention, Early repayment effect, Early repayment penalty type, Prospectus hash, Prospectus URL" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get D-ASA metadata", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "\n Zero Coupon Bond, placed at discount, fixed interest rate, principal at maturity.\n ", "networks": {}, "state": { "schema": { "global": { "ints": 17, "bytes": 2 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "arranger": { "keyType": "AVMBytes", "valueType": "AVMBytes", "key": "UjIwIw==" }, "denomination_asset_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGVub21pbmF0aW9uX2Fzc2V0X2lk" }, "settlement_asset_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c2V0dGxlbWVudF9hc3NldF9pZA==" }, "unit_value": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dW5pdF92YWx1ZQ==" }, "day_count_convention": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGF5X2NvdW50X2NvbnZlbnRpb24=" }, "metadata": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "bWV0YWRhdGE=" }, "total_units": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfdW5pdHM=" }, "circulating_units": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y2lyY3VsYXRpbmdfdW5pdHM=" }, "interest_rate": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "aW50ZXJlc3RfcmF0ZQ==" }, "total_coupons": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWxfY291cG9ucw==" }, "primary_distribution_opening_date": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRl" }, "primary_distribution_closure_date": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRl" }, "issuance_date": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "aXNzdWFuY2VfZGF0ZQ==" }, "secondary_market_opening_date": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGU=" }, "secondary_market_closure_date": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGU=" }, "maturity_date": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bWF0dXJpdHlfZGF0ZQ==" }, "status": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c3RhdHVz" }, "suspended": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c3VzcGVuZGVk" }, "defaulted": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGVmYXVsdGVk" } }, "local": {}, "box": { "coupon_rates": { "keyType": "AVMBytes", "valueType": "uint16[]", "key": "Y291cG9uUmF0ZXM=" }, "time_events": { "keyType": "AVMBytes", "valueType": "uint64[]", "key": "dGltZUV2ZW50cw==" }, "time_periods": { "keyType": "AVMBytes", "valueType": "(uint64,uint64)[]", "key": "dGltZVBlcmlvZHM=" } } }, "maps": { "global": {}, "local": {}, "box": { "account_manager": { "keyType": "address", "valueType": "RoleConfig", "prefix": "UjQwIw==" }, "primary_dealer": { "keyType": "address", "valueType": "RoleConfig", "prefix": "UjUwIw==" }, "trustee": { "keyType": "address", "valueType": "RoleConfig", "prefix": "UjYwIw==" }, "authority": { "keyType": "address", "valueType": "RoleConfig", "prefix": "UjcwIw==" }, "interest_oracle": { "keyType": "address", "valueType": "RoleConfig", "prefix": "UjgwIw==" }, "account": { "keyType": "address", "valueType": "AccountInfo", "prefix": "UjMwIw==" } } } }, "bareActions": { "create": [], "call": [ "UpdateApplication" ] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 3235 ], "errorMessage": "Can not distribute zero units" }, { "pc": [ 2212 ], "errorMessage": "Coupon rates are not properly defined" }, { "pc": [ 2087 ], "errorMessage": "D-ASA already configured" }, { "pc": [ 1448 ], "errorMessage": "Defaulted" }, { "pc": [ 2107 ], "errorMessage": "Denomination asset is not properly set" }, { "pc": [ 2124 ], "errorMessage": "Different settlement asset not supported, must be equal to denomination asset" }, { "pc": [ 1229, 1240, 1247, 1258, 1265, 1276, 1283, 1297, 1317, 1341, 1359, 1426, 1468, 1473, 1571, 1609, 1625, 1686, 1724, 1775, 1853, 1946, 1952, 2272, 2281, 2289, 2325, 2375, 2443, 2458, 2555, 2593, 3046, 3063, 3100, 3188, 3205, 3264, 3355, 3372, 3439, 3456 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ 3249 ], "errorMessage": "Insufficient remaining D-ASA units" }, { "pc": [ 1236 ], "errorMessage": "Insufficient sender units to transfer" }, { "pc": [ 2201 ], "errorMessage": "Interest rate is not properly defined" }, { "pc": [ 1179, 1191, 1605, 1840, 2016, 3006, 3096, 3224, 3402, 3683 ], "errorMessage": "Invalid account holding address" }, { "pc": [ 2716, 2738, 2758, 2778, 2798, 2904, 2921, 2936, 2951, 2966 ], "errorMessage": "Invalid account role address" }, { "pc": [ 1865 ], "errorMessage": "Invalid amount of units for the account" }, { "pc": [ 2191 ], "errorMessage": "Invalid day-count convention ID" }, { "pc": [ 2680, 2872 ], "errorMessage": "Invalid role identifier" }, { "pc": [ 2599 ], "errorMessage": "Invalid secondary market closure date" }, { "pc": [ 2563 ], "errorMessage": "Invalid secondary market opening date" }, { "pc": [ 2161 ], "errorMessage": "Minimum denomination is not a divisor of principal" }, { "pc": [ 1613 ], "errorMessage": "No D-ASA units" }, { "pc": [ 1161, 1589, 2361, 2510, 2990, 3073, 3215, 3382, 3466 ], "errorMessage": "Not authorized" }, { "pc": [ 1681 ], "errorMessage": "Not enough funds for the payment" }, { "pc": [ 1622 ], "errorMessage": "Not mature" }, { "pc": [ 678, 694, 710, 726, 745, 761, 776, 798, 817, 839, 858, 880, 902, 927, 946, 985, 1004, 1023, 1045, 1067 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ 3169 ], "errorMessage": "Primary distribution is closed" }, { "pc": [ 1829 ], "errorMessage": "Primary distribution not yet executed" }, { "pc": [ 1155 ], "errorMessage": "Secondary market is closed" }, { "pc": [ 1291 ], "errorMessage": "Sender and receiver units are not fungible" }, { "pc": [ 1208, 1224, 1459 ], "errorMessage": "Suspended operations" }, { "pc": [ 2246, 2519 ], "errorMessage": "Time events length is invalid" }, { "pc": [ 2382 ], "errorMessage": "Time events must be set in the future" }, { "pc": [ 2464 ], "errorMessage": "Time events must be sorted in strictly ascending order" }, { "pc": [ 2336 ], "errorMessage": "Time periods are not properly defined" }, { "pc": [ 2486 ], "errorMessage": "Time periods in Actual/Actual day count convention must be multiples of a day (in seconds)" }, { "pc": [ 506 ], "errorMessage": "Wrong Global Bytes allocation" }, { "pc": [ 512 ], "errorMessage": "Wrong Global UInts allocation" }, { "pc": [ 516 ], "errorMessage": "Wrong Local Bytes allocation" }, { "pc": [ 520 ], "errorMessage": "Wrong Local UInts allocation" }, { "pc": [ 1677 ], "errorMessage": "account opted into asset" }, { "pc": [ 2099 ], "errorMessage": "asset exists" }, { "pc": [ 989 ], "errorMessage": "can only call when creating" }, { "pc": [ 681, 697, 713, 729, 748, 764, 779, 801, 820, 842, 861, 883, 905, 930, 949, 1007, 1026, 1048, 1070, 1101 ], "errorMessage": "can only call when not creating" }, { "pc": [ 1195, 1211, 1228, 1239, 1246, 1257, 1264, 1275, 1282, 1296, 1316, 1328, 1340, 1352, 1358, 1370, 1381, 1408, 1420, 1424, 1570, 1608, 1624, 1643, 1685, 1723, 1734, 1774, 1852, 3099, 3263, 3273, 3290, 3405, 3685 ], "errorMessage": "check self.account entry exists" }, { "pc": [ 3045, 3062 ], "errorMessage": "check self.account_manager entry exists" }, { "pc": [ 2359 ], "errorMessage": "check self.arranger exists" }, { "pc": [ 3354, 3371 ], "errorMessage": "check self.authority entry exists" }, { "pc": [ 1716, 1792, 3110, 3239, 3253, 3303, 3545, 3586 ], "errorMessage": "check self.circulating_units exists" }, { "pc": [ 1530, 2469, 3563 ], "errorMessage": "check self.day_count_convention exists" }, { "pc": [ 1446, 3522 ], "errorMessage": "check self.defaulted exists" }, { "pc": [ 2120, 3534 ], "errorMessage": "check self.denomination_asset_id exists" }, { "pc": [ 1488, 1885, 2041, 3572 ], "errorMessage": "check self.interest_rate exists" }, { "pc": [ 1509, 1521, 1908, 2546, 3604 ], "errorMessage": "check self.issuance_date exists" }, { "pc": [ 1516, 1620, 1922, 1964, 2572, 2580, 3497, 3610 ], "errorMessage": "check self.maturity_date exists" }, { "pc": [ 3745 ], "errorMessage": "check self.metadata exists" }, { "pc": [ 3187, 3204 ], "errorMessage": "check self.primary_dealer entry exists" }, { "pc": [ 3161, 3598 ], "errorMessage": "check self.primary_distribution_closure_date exists" }, { "pc": [ 1813, 1823, 3147, 3592 ], "errorMessage": "check self.primary_distribution_opening_date exists" }, { "pc": [ 1147, 2614, 3728 ], "errorMessage": "check self.secondary_market_closure_date exists" }, { "pc": [ 1133, 2608, 3722 ], "errorMessage": "check self.secondary_market_opening_date exists" }, { "pc": [ 1632, 1674, 1696, 2136, 3540 ], "errorMessage": "check self.settlement_asset_id exists" }, { "pc": [ 1122, 1585, 2022, 2085, 2505, 2985, 3136, 3697 ], "errorMessage": "check self.status exists" }, { "pc": [ 1457, 3616 ], "errorMessage": "check self.suspended exists" }, { "pc": [ 3710 ], "errorMessage": "check self.time_events exists" }, { "pc": [ 2221, 2242, 2308 ], "errorMessage": "check self.total_coupons exists" }, { "pc": [ 3247, 3299, 3581 ], "errorMessage": "check self.total_units exists" }, { "pc": [ 3438, 3455 ], "errorMessage": "check self.trustee entry exists" }, { "pc": [ 3285, 3550, 3557 ], "errorMessage": "check self.unit_value exists" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuemVyb19jb3Vwb25fYm9uZC5jb250cmFjdC5aZXJvQ291cG9uQm9uZC5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCA0IDQ0OCAxMDAwMCA4NjQwMCAyMDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiY2lyY3VsYXRpbmdfdW5pdHMiIDB4NTIzMzMwMjMgInN0YXR1cyIgIm1hdHVyaXR5X2RhdGUiICJzZXR0bGVtZW50X2Fzc2V0X2lkIiAiaXNzdWFuY2VfZGF0ZSIgMHgwMDAwMDAwMDAwMDAwMDAwICJpbnRlcmVzdF9yYXRlIiAicHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIiAidW5pdF92YWx1ZSIgImRheV9jb3VudF9jb252ZW50aW9uIiAidG90YWxfdW5pdHMiICJ0b3RhbF9jb3Vwb25zIiAic2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUiICJzZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSIgMHgwMCAweDUyMzIzMDIzICJkZW5vbWluYXRpb25fYXNzZXRfaWQiICJwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUiICJzdXNwZW5kZWQiICJkZWZhdWx0ZWQiICJtZXRhZGF0YSIgMHg3NDY5NmQ2NTQ1NzY2NTZlNzQ3MyAweDUyMzczMDIzIDB4NTIzNjMwMjMgMHg1MjM1MzAyMyAweDUyMzQzMDIzIDB4NjM2Zjc1NzA2ZjZlNTI2MTc0NjU3MyAweDA2ODEwMSAweDUyMzgzMDIzCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo0MS00MgogICAgLy8gIyBSb2xlIEJhc2VkIEFjY2VzcyBDb250cm9sCiAgICAvLyBzZWxmLmFycmFuZ2VyID0gR2xvYmFsU3RhdGUoQWNjb3VudCgpLCBrZXk9Y3N0LlBSRUZJWF9JRF9BUlJBTkdFUikKICAgIGJ5dGVjIDE3IC8vIDB4NTIzMjMwMjMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU5LTYwCiAgICAvLyAjIEFzc2V0IENvbmZpZ3VyYXRpb24KICAgIC8vIHNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkID0gVUludDY0KCkKICAgIGJ5dGVjIDE4IC8vICJkZW5vbWluYXRpb25fYXNzZXRfaWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjYxCiAgICAvLyBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQgPSBVSW50NjQoKQogICAgYnl0ZWMgNSAvLyAic2V0dGxlbWVudF9hc3NldF9pZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjIKICAgIC8vIHNlbGYudW5pdF92YWx1ZSA9IFVJbnQ2NCgpCiAgICBieXRlYyAxMCAvLyAidW5pdF92YWx1ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjMKICAgIC8vIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gPSBVSW50NjQoKQogICAgYnl0ZWMgMTEgLy8gImRheV9jb3VudF9jb252ZW50aW9uIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NS02NgogICAgLy8gIyBNZXRhZGF0YQogICAgLy8gc2VsZi5tZXRhZGF0YSA9IEJ5dGVzKCkKICAgIGJ5dGVjIDIyIC8vICJtZXRhZGF0YSIKICAgIHB1c2hieXRlcyAweAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY4LTY5CiAgICAvLyAjIFN1cHBseQogICAgLy8gc2VsZi50b3RhbF91bml0cyA9IFVJbnQ2NCgpCiAgICBieXRlYyAxMiAvLyAidG90YWxfdW5pdHMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcwCiAgICAvLyBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzID0gVUludDY0KCkKICAgIGJ5dGVjXzEgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3Mi03MwogICAgLy8gIyBJbnRlcmVzdAogICAgLy8gc2VsZi5pbnRlcmVzdF9yYXRlID0gVUludDY0KCkKICAgIGJ5dGVjIDggLy8gImludGVyZXN0X3JhdGUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc3CiAgICAvLyBzZWxmLnRvdGFsX2NvdXBvbnMgPSBVSW50NjQoKQogICAgYnl0ZWMgMTMgLy8gInRvdGFsX2NvdXBvbnMiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjgyCiAgICAvLyBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSA9IFVJbnQ2NCgpCiAgICBieXRlYyA5IC8vICJwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSA9IFVJbnQ2NCgpCiAgICBieXRlYyAxOSAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4NAogICAgLy8gc2VsZi5pc3N1YW5jZV9kYXRlID0gVUludDY0KCkKICAgIGJ5dGVjIDYgLy8gImlzc3VhbmNlX2RhdGUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojg1CiAgICAvLyBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlID0gVUludDY0KCkKICAgIGJ5dGVjIDE0IC8vICJzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODYKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgPSBVSW50NjQoKQogICAgYnl0ZWMgMTUgLy8gInNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4NwogICAgLy8gc2VsZi5tYXR1cml0eV9kYXRlID0gVUludDY0KCkKICAgIGJ5dGVjIDQgLy8gIm1hdHVyaXR5X2RhdGUiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojg5LTkwCiAgICAvLyAjIFN0YXR1cwogICAgLy8gc2VsZi5zdGF0dXMgPSBVSW50NjQoY2ZnLlNUQVRVU19FTVBUWSkKICAgIGJ5dGVjXzMgLy8gInN0YXR1cyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTEKICAgIC8vIHNlbGYuc3VzcGVuZGVkID0gVUludDY0KCkKICAgIGJ5dGVjIDIwIC8vICJzdXNwZW5kZWQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkyCiAgICAvLyBzZWxmLmRlZmF1bHRlZCA9IFVJbnQ2NCgpCiAgICBieXRlYyAyMSAvLyAiZGVmYXVsdGVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weTozNS0zNgogICAgLy8gIyBTdGF0ZSBzY2hlbWEgdmFsaWRhdGlvbgogICAgLy8gYXNzZXJ0IFR4bi5nbG9iYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkdMT0JBTF9CWVRFUywgZXJyLldST05HX0dMT0JBTF9CWVRFUwogICAgdHhuIEdsb2JhbE51bUJ5dGVTbGljZQogICAgcHVzaGludCAyIC8vIDIKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgR2xvYmFsIEJ5dGVzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjM3CiAgICAvLyBhc3NlcnQgVHhuLmdsb2JhbF9udW1fdWludCA9PSBjZmcuR0xPQkFMX1VJTlRTLCBlcnIuV1JPTkdfR0xPQkFMX1VJTlRTCiAgICB0eG4gR2xvYmFsTnVtVWludAogICAgcHVzaGludCAxNyAvLyAxNwogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBHbG9iYWwgVUludHMgYWxsb2NhdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MzgKICAgIC8vIGFzc2VydCBUeG4ubG9jYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkxPQ0FMX0JZVEVTLCBlcnIuV1JPTkdfTE9DQUxfQllURVMKICAgIHR4biBMb2NhbE51bUJ5dGVTbGljZQogICAgIQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIEJ5dGVzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjM5CiAgICAvLyBhc3NlcnQgVHhuLmxvY2FsX251bV91aW50ID09IGNmZy5MT0NBTF9VSU5UUywgZXJyLldST05HX0xPQ0FMX1VJTlRTCiAgICB0eG4gTG9jYWxOdW1VaW50CiAgICAhCiAgICBhc3NlcnQgLy8gV3JvbmcgTG9jYWwgVUludHMgYWxsb2NhdGlvbgoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxOS0yNwogICAgLy8gY2xhc3MgWmVyb0NvdXBvbkJvbmQoCiAgICAvLyAgICAgQmFzZURBc2EsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fYmFyZV9yb3V0aW5nQDI1CiAgICBwdXNoYnl0ZXNzIDB4NGZkNmEzY2MgMHg5Yzc2YjZhMyAweDQ0MzYzZDQ5IDB4NjdkYjRmMjAgMHgzZjBlZmM2YyAweGQzYTRkNmFiIDB4MWQ2ZmMyNTUgMHhmZWY3NDU2NyAweGI4ZmMxMzkwIDB4M2Q0M2QxZjAgMHhlYmQ5NmIyZiAweDZjODVlM2VlIDB4ZjYzYWNlOGQgMHhiYmNjYTE4YSAweDFhN2JhYmI0IDB4MTQ2MGE5NjYgMHhlZDAyNzU5ZiAweGZhZDIxNzNlIDB4MDhlZmVhMzUgMHhlNGE1YWI1NCAvLyBtZXRob2QgImFzc2V0X3RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQpdWludDY0IiwgbWV0aG9kICJwYXlfcHJpbmNpcGFsKGFkZHJlc3MsYnl0ZVtdKSh1aW50NjQsdWludDY0LGJ5dGVbXSkiLCBtZXRob2QgImdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWUoYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsKHVpbnQ2NCx1aW50NjQpKSIsIG1ldGhvZCAiZ2V0X3BheW1lbnRfYW1vdW50KGFkZHJlc3MpKHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJhc3NldF9jcmVhdGUoYWRkcmVzcywodWludDgsdWludDgsdWludDgsdWludDgsdWludDgsdWludDgsYnl0ZVszMl0sc3RyaW5nKSl2b2lkIiwgbWV0aG9kICJhc3NldF9jb25maWcodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ4LHVpbnQxNix1aW50MTZbXSx1aW50NjRbXSwodWludDY0LHVpbnQ2NClbXSl2b2lkIiwgbWV0aG9kICJzZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzKHVpbnQ2NFtdKSh1aW50NjQsdWludDY0KSIsIG1ldGhvZCAiYXNzaWduX3JvbGUoYWRkcmVzcyx1aW50OCxieXRlW10pdWludDY0IiwgbWV0aG9kICJyZXZva2Vfcm9sZShhZGRyZXNzLHVpbnQ4KXVpbnQ2NCIsIG1ldGhvZCAib3Blbl9hY2NvdW50KGFkZHJlc3MsYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgImNsb3NlX2FjY291bnQoYWRkcmVzcykodWludDY0LHVpbnQ2NCkiLCBtZXRob2QgInByaW1hcnlfZGlzdHJpYnV0aW9uKGFkZHJlc3MsdWludDY0KXVpbnQ2NCIsIG1ldGhvZCAic2V0X2Fzc2V0X3N1c3BlbnNpb24oYm9vbCl1aW50NjQiLCBtZXRob2QgInNldF9hY2NvdW50X3N1c3BlbnNpb24oYWRkcmVzcyxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0X2RlZmF1bHRfc3RhdHVzKGJvb2wpdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2luZm8oKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDgsdWludDE2LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wsdWludDgpIiwgbWV0aG9kICJnZXRfYWNjb3VudF9pbmZvKGFkZHJlc3MpKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbCkiLCBtZXRob2QgImdldF90aW1lX2V2ZW50cygpdWludDY0W10iLCBtZXRob2QgImdldF9zZWNvbmRhcnlfbWFya2V0X3NjaGVkdWxlKCl1aW50NjRbXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0X21ldGFkYXRhKCkodWludDgsdWludDgsdWludDgsdWludDgsdWludDgsdWludDgsYnl0ZVszMl0sc3RyaW5nKSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANSBtYWluX3BheV9wcmluY2lwYWxfcm91dGVANiBtYWluX2dldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfcm91dGVANyBtYWluX2dldF9wYXltZW50X2Ftb3VudF9yb3V0ZUA4IG1haW5fYXNzZXRfY3JlYXRlX3JvdXRlQDkgbWFpbl9hc3NldF9jb25maWdfcm91dGVAMTAgbWFpbl9zZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzX3JvdXRlQDExIG1haW5fYXNzaWduX3JvbGVfcm91dGVAMTIgbWFpbl9yZXZva2Vfcm9sZV9yb3V0ZUAxMyBtYWluX29wZW5fYWNjb3VudF9yb3V0ZUAxNCBtYWluX2Nsb3NlX2FjY291bnRfcm91dGVAMTUgbWFpbl9wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9yb3V0ZUAxNiBtYWluX3NldF9hc3NldF9zdXNwZW5zaW9uX3JvdXRlQDE3IG1haW5fc2V0X2FjY291bnRfc3VzcGVuc2lvbl9yb3V0ZUAxOCBtYWluX3NldF9kZWZhdWx0X3N0YXR1c19yb3V0ZUAxOSBtYWluX2dldF9hc3NldF9pbmZvX3JvdXRlQDIwIG1haW5fZ2V0X2FjY291bnRfaW5mb19yb3V0ZUAyMSBtYWluX2dldF90aW1lX2V2ZW50c19yb3V0ZUAyMiBtYWluX2dldF9zZWNvbmRhcnlfbWFya2V0X3NjaGVkdWxlX3JvdXRlQDIzIG1haW5fZ2V0X2Fzc2V0X21ldGFkYXRhX3JvdXRlQDI0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxOS0yNwogICAgLy8gY2xhc3MgWmVyb0NvdXBvbkJvbmQoCiAgICAvLyAgICAgQmFzZURBc2EsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfbWV0YWRhdGFfcm91dGVAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo5NzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGdldF9hc3NldF9tZXRhZGF0YQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfc2Vjb25kYXJ5X21hcmtldF9zY2hlZHVsZV9yb3V0ZUAyMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojk1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZ2V0X3NlY29uZGFyeV9tYXJrZXRfc2NoZWR1bGUKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X3RpbWVfZXZlbnRzX3JvdXRlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfdGltZV9ldmVudHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FjY291bnRfaW5mb19yb3V0ZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE5LTI3CiAgICAvLyBjbGFzcyBaZXJvQ291cG9uQm9uZCgKICAgIC8vICAgICBCYXNlREFzYSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz1jZmcuR0xPQkFMX0JZVEVTLAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9Y2ZnLkdMT0JBTF9VSU5UUywKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9Y2ZnLkxPQ0FMX0JZVEVTLAogICAgLy8gICAgICAgICBsb2NhbF91aW50cz1jZmcuTE9DQUxfVUlOVFMsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo5MjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYWNjb3VudF9pbmZvCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldF9pbmZvX3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODg5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgY2FsbHN1YiBnZXRfYXNzZXRfaW5mbwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfZGVmYXVsdF9zdGF0dXNfcm91dGVAMTk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4NzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxOS0yNwogICAgLy8gY2xhc3MgWmVyb0NvdXBvbkJvbmQoCiAgICAvLyAgICAgQmFzZURBc2EsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgc2V0X2RlZmF1bHRfc3RhdHVzCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3NldF9hY2NvdW50X3N1c3BlbnNpb25fcm91dGVAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4NTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxOS0yNwogICAgLy8gY2xhc3MgWmVyb0NvdXBvbkJvbmQoCiAgICAvLyAgICAgQmFzZURBc2EsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgc2V0X2FjY291bnRfc3VzcGVuc2lvbgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfYXNzZXRfc3VzcGVuc2lvbl9yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjgzNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE5LTI3CiAgICAvLyBjbGFzcyBaZXJvQ291cG9uQm9uZCgKICAgIC8vICAgICBCYXNlREFzYSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz1jZmcuR0xPQkFMX0JZVEVTLAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9Y2ZnLkdMT0JBTF9VSU5UUywKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9Y2ZnLkxPQ0FMX0JZVEVTLAogICAgLy8gICAgICAgICBsb2NhbF91aW50cz1jZmcuTE9DQUxfVUlOVFMsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4MzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBzZXRfYXNzZXRfc3VzcGVuc2lvbgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9yb3V0ZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE5LTI3CiAgICAvLyBjbGFzcyBaZXJvQ291cG9uQm9uZCgKICAgIC8vICAgICBCYXNlREFzYSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz1jZmcuR0xPQkFMX0JZVEVTLAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9Y2ZnLkdMT0JBTF9VSU5UUywKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9Y2ZnLkxPQ0FMX0JZVEVTLAogICAgLy8gICAgICAgICBsb2NhbF91aW50cz1jZmcuTE9DQUxfVUlOVFMsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3OTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBwcmltYXJ5X2Rpc3RyaWJ1dGlvbgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jbG9zZV9hY2NvdW50X3JvdXRlQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzYyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTktMjcKICAgIC8vIGNsYXNzIFplcm9Db3Vwb25Cb25kKAogICAgLy8gICAgIEJhc2VEQXNhLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc2MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGNsb3NlX2FjY291bnQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fb3Blbl9hY2NvdW50X3JvdXRlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTktMjcKICAgIC8vIGNsYXNzIFplcm9Db3Vwb25Cb25kKAogICAgLy8gICAgIEJhc2VEQXNhLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIG9wZW5fYWNjb3VudAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZXZva2Vfcm9sZV9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE5LTI3CiAgICAvLyBjbGFzcyBaZXJvQ291cG9uQm9uZCgKICAgIC8vICAgICBCYXNlREFzYSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz1jZmcuR0xPQkFMX0JZVEVTLAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9Y2ZnLkdMT0JBTF9VSU5UUywKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9Y2ZnLkxPQ0FMX0JZVEVTLAogICAgLy8gICAgICAgICBsb2NhbF91aW50cz1jZmcuTE9DQUxfVUlOVFMsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NzkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiByZXZva2Vfcm9sZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NpZ25fcm9sZV9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjYxNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE5LTI3CiAgICAvLyBjbGFzcyBaZXJvQ291cG9uQm9uZCgKICAgIC8vICAgICBCYXNlREFzYSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz1jZmcuR0xPQkFMX0JZVEVTLAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9Y2ZnLkdMT0JBTF9VSU5UUywKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9Y2ZnLkxPQ0FMX0JZVEVTLAogICAgLy8gICAgICAgICBsb2NhbF91aW50cz1jZmcuTE9DQUxfVUlOVFMsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2MTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgY2FsbHN1YiBhc3NpZ25fcm9sZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzX3JvdXRlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTktMjcKICAgIC8vIGNsYXNzIFplcm9Db3Vwb25Cb25kKAogICAgLy8gICAgIEJhc2VEQXNhLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU2MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHNldF9zZWNvbmRhcnlfdGltZV9ldmVudHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfY29uZmlnX3JvdXRlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTktMjcKICAgIC8vIGNsYXNzIFplcm9Db3Vwb25Cb25kKAogICAgLy8gICAgIEJhc2VEQXNhLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDcKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjQ3OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIGFzc2V0X2NvbmZpZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hc3NldF9jcmVhdGVfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjQ1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTktMjcKICAgIC8vIGNsYXNzIFplcm9Db3Vwb25Cb25kKAogICAgLy8gICAgIEJhc2VEQXNhLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjQ1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBjYWxsc3ViIGFzc2V0X2NyZWF0ZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfcGF5bWVudF9hbW91bnRfcm91dGVAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjIyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE5LTI3CiAgICAvLyBjbGFzcyBaZXJvQ291cG9uQm9uZCgKICAgIC8vICAgICBCYXNlREFzYSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz1jZmcuR0xPQkFMX0JZVEVTLAogICAgLy8gICAgICAgICBnbG9iYWxfdWludHM9Y2ZnLkdMT0JBTF9VSU5UUywKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9Y2ZnLkxPQ0FMX0JZVEVTLAogICAgLy8gICAgICAgICBsb2NhbF91aW50cz1jZmcuTE9DQUxfVUlOVFMsCiAgICAvLyAgICAgKSwKICAgIC8vICk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToyMjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfcGF5bWVudF9hbW91bnQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTktMjcKICAgIC8vIGNsYXNzIFplcm9Db3Vwb25Cb25kKAogICAgLy8gICAgIEJhc2VEQXNhLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWUKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcGF5X3ByaW5jaXBhbF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTktMjcKICAgIC8vIGNsYXNzIFplcm9Db3Vwb25Cb25kKAogICAgLy8gICAgIEJhc2VEQXNhLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjExOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBjYWxsc3ViIHBheV9wcmluY2lwYWwKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYXNzZXRfdHJhbnNmZXJfcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTktMjcKICAgIC8vIGNsYXNzIFplcm9Db3Vwb25Cb25kKAogICAgLy8gICAgIEJhc2VEQXNhLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGNhbGxzdWIgYXNzZXRfdHJhbnNmZXIKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYmFyZV9yb3V0aW5nQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTktMjcKICAgIC8vIGNsYXNzIFplcm9Db3Vwb25Cb25kKAogICAgLy8gICAgIEJhc2VEQXNhLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIGludGNfMyAvLyA0CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBtYXRjaCBtYWluX2Fzc2V0X3VwZGF0ZUAyNgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMjcKCm1haW5fYXNzZXRfdXBkYXRlQDI2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDY4CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJVcGRhdGVBcHBsaWNhdGlvbiJdKQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo0NjgtNDY5CiAgICAvLyBAYXJjNC5iYXJlbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJVcGRhdGVBcHBsaWNhdGlvbiJdKQogICAgLy8gZGVmIGFzc2V0X3VwZGF0ZShzZWxmKSAtPiBOb25lOgogICAgY2FsbHN1YiBhc3NldF91cGRhdGUKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuemVyb19jb3Vwb25fYm9uZC5jb250cmFjdC5aZXJvQ291cG9uQm9uZC5hc3NldF90cmFuc2ZlcihzZW5kZXJfaG9sZGluZ19hZGRyZXNzOiBieXRlcywgcmVjZWl2ZXJfaG9sZGluZ19hZGRyZXNzOiBieXRlcywgdW5pdHM6IGJ5dGVzKSAtPiBieXRlczoKYXNzZXRfdHJhbnNmZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weTo3NS04MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfdHJhbnNmZXIoCiAgICAvLyAgICAgc2VsZiwKICAgIC8vICAgICBzZW5kZXJfaG9sZGluZ19hZGRyZXNzOiBhcmM0LkFkZHJlc3MsCiAgICAvLyAgICAgcmVjZWl2ZXJfaG9sZGluZ19hZGRyZXNzOiBhcmM0LkFkZHJlc3MsCiAgICAvLyAgICAgdW5pdHM6IGFyYzQuVUludDY0LAogICAgLy8gKSAtPiBhcmM0LlVJbnQ2NDoKICAgIHByb3RvIDMgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjEwNQogICAgLy8gdW5pdHMubmF0aXZlLAogICAgZnJhbWVfZGlnIC0xCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMDEKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBjZmcuU1RBVFVTX0FDVElWRQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyOTMtMjk2CiAgICAvLyBzZWxmLnN0YXR1c19pc19hY3RpdmUoKQogICAgLy8gYW5kIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8IHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUKICAgIGJ6IGFzc2V0X3RyYW5zZmVyX2Jvb2xfZmFsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Mjk0CiAgICAvLyBhbmQgc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI5NQogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGR1cAogICAgZnJhbWVfYnVyeSA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyOTQtMjk1CiAgICAvLyBhbmQgc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZQogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIDw9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyOTQtMjk2CiAgICAvLyBhbmQgc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZQogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDwgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgYnogYXNzZXRfdHJhbnNmZXJfYm9vbF9mYWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyOTYKICAgIC8vIDwgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJzZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI5NS0yOTYKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8IHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUKICAgIGZyYW1lX2RpZyA0CiAgICA+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyOTQtMjk2CiAgICAvLyBhbmQgc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZQogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDwgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgYnogYXNzZXRfdHJhbnNmZXJfYm9vbF9mYWxzZUA1CiAgICBpbnRjXzEgLy8gMQoKYXNzZXRfdHJhbnNmZXJfYm9vbF9tZXJnZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjkyLTI5NwogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLnN0YXR1c19pc19hY3RpdmUoKQogICAgLy8gICAgIGFuZCBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlCiAgICAvLyAgICAgPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vICAgICA8IHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUKICAgIC8vICksIGVyci5TRUNPTkRBUllfTUFSS0VUX0NMT1NFRAogICAgYXNzZXJ0IC8vIFNlY29uZGFyeSBtYXJrZXQgaXMgY2xvc2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozNzEtMzczCiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZ3JhbnRzIHRyYW5zZmVyIHJpZ2h0IHRvIEQtQVNBIG93bmVycy4gT3RoZXIgaW1wbGVtZW50YXRpb25zIG1heSByZWxheSBvbiBvdGhlcgogICAgLy8gIyByb2xlcywgZXh0ZXJuYWwgQXBwcyB0aHJvdWdoIEMyQyBjYWxscyAoZS5nLiwgYW4gb3JkZXIgYm9vayksIG9yIG9mZi1jaGFpbiB0cmFuc2ZlciBhZ2VudHMuCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZW5kZXJfaG9sZGluZ19hZGRyZXNzLm5hdGl2ZSwgZXJyLlVOQVVUSE9SSVpFRAogICAgdHhuIFNlbmRlcgogICAgZnJhbWVfZGlnIC0zCiAgICA9PQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozNzQKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2RlZmF1bHRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Mzc1CiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3Rfc3VzcGVuZGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9zdXNwZW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE3MQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWNfMiAvLyAweDUyMzMzMDIzCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IGhvbGRpbmcgYWRkcmVzcwogICAgYnl0ZWNfMiAvLyAweDUyMzMzMDIzCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IGhvbGRpbmcgYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Mzc4CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuYWNjb3VudFtzZW5kZXJfaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQubmF0aXZlLCBlcnIuU1VTUEVOREVECiAgICBkaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGludGMgNCAvLyA0NDgKICAgIGdldGJpdAogICAgYnl0ZWMgMTYgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gU3VzcGVuZGVkIG9wZXJhdGlvbnMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjM3OS0zODEKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5hY2NvdW50WwogICAgLy8gICAgIHJlY2VpdmVyX2hvbGRpbmdfYWRkcmVzcwogICAgLy8gXS5zdXNwZW5kZWQubmF0aXZlLCBlcnIuU1VTUEVOREVECiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBpbnRjIDQgLy8gNDQ4CiAgICBnZXRiaXQKICAgIGJ5dGVjIDE2IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIFN1c3BlbmRlZCBvcGVyYXRpb25zCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozODMKICAgIC8vIHVuaXRzIDw9IHNlbGYuYWNjb3VudFtzZW5kZXJfaG9sZGluZ19hZGRyZXNzXS51bml0cy5uYXRpdmUKICAgIGRpZyAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAzMiA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgZnJhbWVfZGlnIDUKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozODItMzg0CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHVuaXRzIDw9IHNlbGYuYWNjb3VudFtzZW5kZXJfaG9sZGluZ19hZGRyZXNzXS51bml0cy5uYXRpdmUKICAgIC8vICksIGVyci5PVkVSX1RSQU5TRkVSCiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IHNlbmRlciB1bml0cyB0byB0cmFuc2ZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MzkyCiAgICAvLyBzZW5kZXJfdW5pdF92YWx1ZSA9IHNlbGYuYWNjb3VudFtzZW5kZXJfaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlCiAgICBzd2FwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCA0MCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozOTMKICAgIC8vIGlmIHNlbGYuYWNjb3VudFtyZWNlaXZlcl9ob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZSA+IDA6CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAzMiA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgYnogYXNzZXRfdHJhbnNmZXJfZWxzZV9ib2R5QDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozMDQKICAgIC8vIHNlbGYuYWNjb3VudFtzZW5kZXJdLnVuaXRfdmFsdWUgPT0gc2VsZi5hY2NvdW50W3JlY2VpdmVyXS51bml0X3ZhbHVlCiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgNDAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGZyYW1lX2RpZyAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCA0MCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYj09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozMDQtMzA1CiAgICAvLyBzZWxmLmFjY291bnRbc2VuZGVyXS51bml0X3ZhbHVlID09IHNlbGYuYWNjb3VudFtyZWNlaXZlcl0udW5pdF92YWx1ZQogICAgLy8gYW5kIHNlbGYuYWNjb3VudFtzZW5kZXJdLnBhaWRfY291cG9ucyA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnBhaWRfY291cG9ucwogICAgYnogYXNzZXRfdHJhbnNmZXJfYm9vbF9mYWxzZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MzA1CiAgICAvLyBhbmQgc2VsZi5hY2NvdW50W3NlbmRlcl0ucGFpZF9jb3Vwb25zID09IHNlbGYuYWNjb3VudFtyZWNlaXZlcl0ucGFpZF9jb3Vwb25zCiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgNDggOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGZyYW1lX2RpZyAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCA0OCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYj09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozMDQtMzA1CiAgICAvLyBzZWxmLmFjY291bnRbc2VuZGVyXS51bml0X3ZhbHVlID09IHNlbGYuYWNjb3VudFtyZWNlaXZlcl0udW5pdF92YWx1ZQogICAgLy8gYW5kIHNlbGYuYWNjb3VudFtzZW5kZXJdLnBhaWRfY291cG9ucyA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnBhaWRfY291cG9ucwogICAgYnogYXNzZXRfdHJhbnNmZXJfYm9vbF9mYWxzZUAxNAogICAgaW50Y18xIC8vIDEKCmFzc2V0X3RyYW5zZmVyX2Jvb2xfbWVyZ2VAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozMDMtMzA2CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYWNjb3VudFtzZW5kZXJdLnVuaXRfdmFsdWUgPT0gc2VsZi5hY2NvdW50W3JlY2VpdmVyXS51bml0X3ZhbHVlCiAgICAvLyAgICAgYW5kIHNlbGYuYWNjb3VudFtzZW5kZXJdLnBhaWRfY291cG9ucyA9PSBzZWxmLmFjY291bnRbcmVjZWl2ZXJdLnBhaWRfY291cG9ucwogICAgLy8gKSwgZXJyLk5PTl9GVU5HSUJMRV9VTklUUwogICAgYXNzZXJ0IC8vIFNlbmRlciBhbmQgcmVjZWl2ZXIgdW5pdHMgYXJlIG5vdCBmdW5naWJsZQoKYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjEwOC0xMDkKICAgIC8vICMgVHJhbnNmZXJyZWQgdW5pdHMgdmFsdWUgKG11c3QgYmUgY29tcHV0ZWQgYmVmb3JlIHRoZSB0cmFuc2ZlcikKICAgIC8vIHNlbmRlcl91bml0X3ZhbHVlID0gc2VsZi5hY2NvdW50W3NlbmRlcl9ob2xkaW5nX2FkZHJlc3NdLnVuaXRfdmFsdWUKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDQwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjExMC0xMTIKICAgIC8vIGFjY3J1ZWRfaW50ZXJlc3QgPSBzZWxmLmFjY3J1ZWRfaW50ZXJlc3RfYW1vdW50KAogICAgLy8gICAgIHNlbmRlcl9ob2xkaW5nX2FkZHJlc3MsIHVuaXRzLm5hdGl2ZQogICAgLy8gKQogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgNQogICAgZHVwCiAgICBjb3ZlciAzCiAgICBjYWxsc3ViIGFjY3J1ZWRfaW50ZXJlc3RfYW1vdW50CiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjQyOQogICAgLy8gc2VsZi5hY2NvdW50W3NlbmRlcl9ob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZSAtIHVuaXRzCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDMyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBkaWcgMgogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDI4LTQzMAogICAgLy8gc2VsZi5hY2NvdW50W3NlbmRlcl9ob2xkaW5nX2FkZHJlc3NdLnVuaXRzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgc2VsZi5hY2NvdW50W3NlbmRlcl9ob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZSAtIHVuaXRzCiAgICAvLyApCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo0MjgKICAgIC8vIHNlbGYuYWNjb3VudFtzZW5kZXJfaG9sZGluZ19hZGRyZXNzXS51bml0cyA9IGFyYzQuVUludDY0KAogICAgZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo0MjgtNDMwCiAgICAvLyBzZWxmLmFjY291bnRbc2VuZGVyX2hvbGRpbmdfYWRkcmVzc10udW5pdHMgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBzZWxmLmFjY291bnRbc2VuZGVyX2hvbGRpbmdfYWRkcmVzc10udW5pdHMubmF0aXZlIC0gdW5pdHMKICAgIC8vICkKICAgIHN3YXAKICAgIHJlcGxhY2UyIDMyCiAgICBkaWcgMQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDMyCiAgICAvLyBzZWxmLmFjY291bnRbcmVjZWl2ZXJfaG9sZGluZ19hZGRyZXNzXS51bml0cy5uYXRpdmUgKyB1bml0cwogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMzIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIHVuY292ZXIgMwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDMxLTQzMwogICAgLy8gc2VsZi5hY2NvdW50W3JlY2VpdmVyX2hvbGRpbmdfYWRkcmVzc10udW5pdHMgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBzZWxmLmFjY291bnRbcmVjZWl2ZXJfaG9sZGluZ19hZGRyZXNzXS51bml0cy5uYXRpdmUgKyB1bml0cwogICAgLy8gKQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDMxCiAgICAvLyBzZWxmLmFjY291bnRbcmVjZWl2ZXJfaG9sZGluZ19hZGRyZXNzXS51bml0cyA9IGFyYzQuVUludDY0KAogICAgZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo0MzEtNDMzCiAgICAvLyBzZWxmLmFjY291bnRbcmVjZWl2ZXJfaG9sZGluZ19hZGRyZXNzXS51bml0cyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIHNlbGYuYWNjb3VudFtyZWNlaXZlcl9ob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZSArIHVuaXRzCiAgICAvLyApCiAgICBzd2FwCiAgICByZXBsYWNlMiAzMgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MzU1CiAgICAvLyBpZiBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cy5uYXRpdmUgPT0gMDoKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDMyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBibnogYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAyMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MzU2CiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlID0gYXJjNC5VSW50NjQoKQogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGJ5dGVjIDcgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICByZXBsYWNlMiA0MAogICAgZGlnIDEKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjM1NwogICAgLy8gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGFpZF9jb3Vwb25zID0gYXJjNC5VSW50NjQoKQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgYnl0ZWMgNyAvLyAweDAwMDAwMDAwMDAwMDAwMDAKICAgIHJlcGxhY2UyIDQ4CiAgICBib3hfcHV0Cgphc3NldF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDIxOgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTE3CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQodW5pdHMubmF0aXZlICogc2VuZGVyX3VuaXRfdmFsdWUubmF0aXZlICsgYWNjcnVlZF9pbnRlcmVzdCkKICAgIGZyYW1lX2RpZyAwCiAgICBidG9pCiAgICBmcmFtZV9kaWcgNQogICAgKgogICAgZnJhbWVfZGlnIDMKICAgICsKICAgIGl0b2IKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgphc3NldF90cmFuc2Zlcl9ib29sX2ZhbHNlQDE0OgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXRfdHJhbnNmZXJfYm9vbF9tZXJnZUAxNQoKYXNzZXRfdHJhbnNmZXJfZWxzZV9ib2R5QDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Mzk4CiAgICAvLyBzZWxmLmFjY291bnRbcmVjZWl2ZXJfaG9sZGluZ19hZGRyZXNzXS51bml0X3ZhbHVlID0gc2VuZGVyX3VuaXRfdmFsdWUKICAgIGZyYW1lX2RpZyAyCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBmcmFtZV9kaWcgMAogICAgcmVwbGFjZTIgNDAKICAgIGRpZyAxCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozOTktNDAxCiAgICAvLyBzZWxmLmFjY291bnRbcmVjZWl2ZXJfaG9sZGluZ19hZGRyZXNzXS5wYWlkX2NvdXBvbnMgPSBzZWxmLmFjY291bnRbCiAgICAvLyAgICAgc2VuZGVyX2hvbGRpbmdfYWRkcmVzcwogICAgLy8gXS5wYWlkX2NvdXBvbnMKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Mzk5CiAgICAvLyBzZWxmLmFjY291bnRbcmVjZWl2ZXJfaG9sZGluZ19hZGRyZXNzXS5wYWlkX2NvdXBvbnMgPSBzZWxmLmFjY291bnRbCiAgICBkaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjM5OS00MDEKICAgIC8vIHNlbGYuYWNjb3VudFtyZWNlaXZlcl9ob2xkaW5nX2FkZHJlc3NdLnBhaWRfY291cG9ucyA9IHNlbGYuYWNjb3VudFsKICAgIC8vICAgICBzZW5kZXJfaG9sZGluZ19hZGRyZXNzCiAgICAvLyBdLnBhaWRfY291cG9ucwogICAgc3dhcAogICAgZXh0cmFjdCA0OCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcmVwbGFjZTIgNDgKICAgIGJveF9wdXQKICAgIGIgYXNzZXRfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAxNwoKYXNzZXRfdHJhbnNmZXJfYm9vbF9mYWxzZUA1OgogICAgaW50Y18wIC8vIDAKICAgIGIgYXNzZXRfdHJhbnNmZXJfYm9vbF9tZXJnZUA2CgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2EuYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQoKSAtPiB2b2lkOgphc3NlcnRfaXNfbm90X2RlZmF1bHRlZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjEwNy0xMDgKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTA5CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuZGVmYXVsdGVkLCBlcnIuREVGQVVMVEVECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjEgLy8gImRlZmF1bHRlZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZWZhdWx0ZWQgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQgLy8gRGVmYXVsdGVkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5hc3NlcnRfaXNfbm90X3N1c3BlbmRlZCgpIC0+IHZvaWQ6CmFzc2VydF9pc19ub3Rfc3VzcGVuZGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTExLTExMgogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBhc3NlcnRfaXNfbm90X3N1c3BlbmRlZChzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMTMKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5zdXNwZW5kZWQsIGVyci5TVVNQRU5ERUQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMCAvLyAic3VzcGVuZGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN1c3BlbmRlZCBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBTdXNwZW5kZWQgb3BlcmF0aW9ucwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnplcm9fY291cG9uX2JvbmQuY29udHJhY3QuWmVyb0NvdXBvbkJvbmQuYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQoaG9sZGluZ19hZGRyZXNzOiBieXRlcywgdW5pdHM6IHVpbnQ2NCkgLT4gdWludDY0OgphY2NydWVkX2ludGVyZXN0X2Ftb3VudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjU5LTYyCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGFjY3J1ZWRfaW50ZXJlc3RfYW1vdW50KAogICAgLy8gICAgIHNlbGYsIGhvbGRpbmdfYWRkcmVzczogYXJjNC5BZGRyZXNzLCB1bml0czogVUludDY0CiAgICAvLyApIC0+IFVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6NjMKICAgIC8vIGRheV9jb3VudF9mYWN0b3IgPSBzZWxmLmRheV9jb3VudF9mYWN0b3IoKQogICAgY2FsbHN1YiBkYXlfY291bnRfZmFjdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weTo2NAogICAgLy8gYWNjcnVlZF9wZXJpb2QgPSBkYXlfY291bnRfZmFjdG9yLm51bWVyYXRvci5uYXRpdmUKICAgIGR1cAogICAgZXh0cmFjdCAwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weTo2NQogICAgLy8gcHJpbmNpcGFsX3BlcmlvZCA9IGRheV9jb3VudF9mYWN0b3IuZGVub21pbmF0b3IubmF0aXZlCiAgICBzd2FwCiAgICBleHRyYWN0IDggOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjY3CiAgICAvLyBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzLCB1bml0cykKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGFjY291bnRfdW5pdHNfdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjY4CiAgICAvLyAqIHNlbGYuaW50ZXJlc3RfcmF0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gImludGVyZXN0X3JhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW50ZXJlc3RfcmF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjY3LTY4CiAgICAvLyBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzLCB1bml0cykKICAgIC8vICogc2VsZi5pbnRlcmVzdF9yYXRlCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weTo2Ny02OQogICAgLy8gc2VsZi5hY2NvdW50X3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcywgdW5pdHMpCiAgICAvLyAqIHNlbGYuaW50ZXJlc3RfcmF0ZQogICAgLy8gKiBhY2NydWVkX3BlcmlvZAogICAgdW5jb3ZlciAyCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weTo3MQogICAgLy8gY3N0LkJQUyAqIHByaW5jaXBhbF9wZXJpb2QKICAgIGludGMgNSAvLyAxMDAwMAogICAgdW5jb3ZlciAyCiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weTo2Ny03MgogICAgLy8gc2VsZi5hY2NvdW50X3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcywgdW5pdHMpCiAgICAvLyAqIHNlbGYuaW50ZXJlc3RfcmF0ZQogICAgLy8gKiBhY2NydWVkX3BlcmlvZAogICAgLy8gLy8gKAogICAgLy8gICAgIGNzdC5CUFMgKiBwcmluY2lwYWxfcGVyaW9kCiAgICAvLyApICAjIGRpdi1ieS16ZXJvOiBwcmluY2lwYWxfcGVyaW9kICE9IDAgZHVlIHRvIGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQgY2hlY2tzCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weTo2Ni03MwogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoaG9sZGluZ19hZGRyZXNzLCB1bml0cykKICAgIC8vICAgICAqIHNlbGYuaW50ZXJlc3RfcmF0ZQogICAgLy8gICAgICogYWNjcnVlZF9wZXJpb2QKICAgIC8vICAgICAvLyAoCiAgICAvLyAgICAgICAgIGNzdC5CUFMgKiBwcmluY2lwYWxfcGVyaW9kCiAgICAvLyAgICAgKSAgIyBkaXYtYnktemVybzogcHJpbmNpcGFsX3BlcmlvZCAhPSAwIGR1ZSB0byBhc3NlcnRfdGltZV9ldmVudHNfc29ydGVkIGNoZWNrcwogICAgLy8gKQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnplcm9fY291cG9uX2JvbmQuY29udHJhY3QuWmVyb0NvdXBvbkJvbmQuZGF5X2NvdW50X2ZhY3RvcigpIC0+IGJ5dGVzOgpkYXlfY291bnRfZmFjdG9yOgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6NDEtNDIKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgZGF5X2NvdW50X2ZhY3RvcihzZWxmKSAtPiB0eXAuRGF5Q291bnRGYWN0b3I6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjQzLTQ0CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSB0aGUgQWN0dWFsL0FjdHVhbCBhbmQgQ29udGludW91cyBkYXktY291bnQgY29udmVudGlvbnMKICAgIC8vIGFjY3J1ZWRfcGVyaW9kID0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgLSBzZWxmLmlzc3VhbmNlX2RhdGUKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJpc3N1YW5jZV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmlzc3VhbmNlX2RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBwcmluY2lwYWxfcGVyaW9kID0gc2VsZi5tYXR1cml0eV9kYXRlIC0gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXR1cml0eV9kYXRlIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImlzc3VhbmNlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaXNzdWFuY2VfZGF0ZSBleGlzdHMKICAgIC0KICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6NDYKICAgIC8vIGlmIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gPT0gVUludDY0KGNzdC5EQ0NfQV9BKToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAiZGF5X2NvdW50X2NvbnZlbnRpb24iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24gZXhpc3RzCiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBibnogZGF5X2NvdW50X2ZhY3Rvcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjM1MQogICAgLy8gcmV0dXJuIHRpbWVfcGVyaW9kIC8vIFVJbnQ2NChjc3QuREFZXzJfU0VDKQogICAgZnJhbWVfZGlnIDAKICAgIGludGMgNiAvLyA4NjQwMAogICAgLwogICAgZnJhbWVfZGlnIDEKICAgIGludGMgNiAvLyA4NjQwMAogICAgLwogICAgZnJhbWVfYnVyeSAyCiAgICBmcmFtZV9idXJ5IDMKCmRheV9jb3VudF9mYWN0b3JfYWZ0ZXJfaWZfZWxzZUAyOgogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weTo1MAogICAgLy8gbnVtZXJhdG9yPWFyYzQuVUludDY0KGFjY3J1ZWRfcGVyaW9kKSwKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjUxCiAgICAvLyBkZW5vbWluYXRvcj1hcmM0LlVJbnQ2NChwcmluY2lwYWxfcGVyaW9kKSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjQ5LTUyCiAgICAvLyByZXR1cm4gdHlwLkRheUNvdW50RmFjdG9yKAogICAgLy8gICAgIG51bWVyYXRvcj1hcmM0LlVJbnQ2NChhY2NydWVkX3BlcmlvZCksCiAgICAvLyAgICAgZGVub21pbmF0b3I9YXJjNC5VSW50NjQocHJpbmNpcGFsX3BlcmlvZCksCiAgICAvLyApCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2EuYWNjb3VudF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3M6IGJ5dGVzLCB1bml0czogdWludDY0KSAtPiB1aW50NjQ6CmFjY291bnRfdW5pdHNfdmFsdWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozMzctMzQwCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGFjY291bnRfdW5pdHNfdmFsdWUoCiAgICAvLyAgICAgc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBhcmM0LkFkZHJlc3MsIHVuaXRzOiBVSW50NjQKICAgIC8vICkgLT4gVUludDY0OgogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozNDEKICAgIC8vIHJldHVybiB1bml0cyAqIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRfdmFsdWUubmF0aXZlCiAgICBieXRlY18yIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCA0MCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuemVyb19jb3Vwb25fYm9uZC5jb250cmFjdC5aZXJvQ291cG9uQm9uZC5wYXlfcHJpbmNpcGFsKGhvbGRpbmdfYWRkcmVzczogYnl0ZXMsIHBheW1lbnRfaW5mbzogYnl0ZXMpIC0+IGJ5dGVzOgpwYXlfcHJpbmNpcGFsOgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTE5LTEyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgcGF5X3ByaW5jaXBhbCgKICAgIC8vICAgICBzZWxmLCBob2xkaW5nX2FkZHJlc3M6IGFyYzQuQWRkcmVzcywgcGF5bWVudF9pbmZvOiBhcmM0LkR5bmFtaWNCeXRlcwogICAgLy8gKSAtPiB0eXAuUGF5bWVudFJlc3VsdDoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTAxCiAgICAvLyByZXR1cm4gc2VsZi5zdGF0dXMgPT0gY2ZnLlNUQVRVU19BQ1RJVkUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJzdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDM4LTQzOQogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHJlc3RyaWN0IGNhbGxlciBhdXRob3JpemF0aW9uCiAgICAvLyBhc3NlcnQgc2VsZi5zdGF0dXNfaXNfYWN0aXZlKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDQwCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjQ0MQogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3Rfc3VzcGVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxNzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzIgLy8gMHg1MjMzMzAyMwogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGR1cG4gMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IGhvbGRpbmcgYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDQzCiAgICAvLyB1bml0cyA9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAzMiA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDQ0CiAgICAvLyBhc3NlcnQgdW5pdHMgPiAwLCBlcnIuTk9fVU5JVFMKICAgIGFzc2VydCAvLyBObyBELUFTQSB1bml0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDQ1CiAgICAvLyBhc3NlcnQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5tYXR1cml0eV9kYXRlLCBlcnIuTk9UX01BVFVSRQogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gIm1hdHVyaXR5X2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0dXJpdHlfZGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gTm90IG1hdHVyZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MzExCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5wYXltZW50X2FkZHJlc3MubmF0aXZlLmlzX29wdGVkX2luKAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjMxMgogICAgLy8gQXNzZXQoc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInNldHRsZW1lbnRfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjMxMS0zMTMKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcy5uYXRpdmUuaXNfb3B0ZWRfaW4oCiAgICAvLyAgICAgQXNzZXQoc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkKQogICAgLy8gKQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjMxMS0zMTQKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnBheW1lbnRfYWRkcmVzcy5uYXRpdmUuaXNfb3B0ZWRfaW4oCiAgICAvLyAgICAgQXNzZXQoc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkKQogICAgLy8gKQogICAgLy8gYW5kIG5vdCBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQubmF0aXZlCiAgICBieiBwYXlfcHJpbmNpcGFsX2Jvb2xfZmFsc2VAMTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjMxNAogICAgLy8gYW5kIG5vdCBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS5zdXNwZW5kZWQubmF0aXZlCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGludGMgNCAvLyA0NDgKICAgIGdldGJpdAogICAgYnl0ZWMgMTYgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBibnogcGF5X3ByaW5jaXBhbF9ib29sX2ZhbHNlQDE2CiAgICBpbnRjXzEgLy8gMQoKcGF5X3ByaW5jaXBhbF9ib29sX21lcmdlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTQ0CiAgICAvLyBpZiBzZWxmLmlzX3BheW1lbnRfZXhlY3V0YWJsZShob2xkaW5nX2FkZHJlc3MpOgogICAgYnogcGF5X3ByaW5jaXBhbF9lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTQ1CiAgICAvLyBwYXltZW50X2Ftb3VudCA9IHNlbGYuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3MpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgYWNjb3VudF90b3RhbF91bml0c192YWx1ZQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozMjAKICAgIC8vIEFzc2V0KHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCkuYmFsYW5jZShHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzKQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vICJzZXR0bGVtZW50X2Fzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQgZXhpc3RzCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjMyMC0zMjEKICAgIC8vIEFzc2V0KHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCkuYmFsYW5jZShHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzKQogICAgLy8gPj0gcGF5bWVudF9hbW91bnQKICAgIGRpZyAxCiAgICA+PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MzE5LTMyMgogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBBc3NldChzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQpLmJhbGFuY2UoR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcykKICAgIC8vICAgICA+PSBwYXltZW50X2Ftb3VudAogICAgLy8gKSwgZXJyLk5PVF9FTk9VR0hfRlVORFMKICAgIGFzc2VydCAvLyBOb3QgZW5vdWdoIGZ1bmRzIGZvciB0aGUgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTQ4LTE0OQogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyB0aGUgc2FtZSBhc3NldCBmb3IgZGVub21pbmF0aW9uIGFuZCBzZXR0bGVtZW50LCBubyBjb252ZXJzaW9uIG5lZWRlZAogICAgLy8gc2VsZi5wYXkoc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10ucGF5bWVudF9hZGRyZXNzLCBwYXltZW50X2Ftb3VudCkKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAwIDMyIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MzI2LTMzMQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXJlY2VpdmVyLm5hdGl2ZSwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozMzAKICAgIC8vIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozMjcKICAgIC8vIHhmZXJfYXNzZXQ9c2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInNldHRsZW1lbnRfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCBleGlzdHMKICAgIHVuY292ZXIgMwogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozMjYKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIGludGNfMyAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjMyNi0zMzEKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1yZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBmZWU9R2xvYmFsLm1pbl90eG5fZmVlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCnBheV9wcmluY2lwYWxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDUyCiAgICAvLyBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzIC09IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgY292ZXIgMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMzIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC0KICAgIGJ5dGVjXzEgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjQ1MwogICAgLy8gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMgPSBhcmM0LlVJbnQ2NCgpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBieXRlYyA3IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgcmVwbGFjZTIgMzIKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjQ1NAogICAgLy8gc2VsZi5lbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMoKQogICAgY2FsbHN1YiBlbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gYW1vdW50PWFyYzQuVUludDY0KHBheW1lbnRfYW1vdW50KSwKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE1NwogICAgLy8gdGltZXN0YW1wPWFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSwKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE1NS0xNTkKICAgIC8vIHJldHVybiB0eXAuUGF5bWVudFJlc3VsdCgKICAgIC8vICAgICBhbW91bnQ9YXJjNC5VSW50NjQocGF5bWVudF9hbW91bnQpLAogICAgLy8gICAgIHRpbWVzdGFtcD1hcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCksCiAgICAvLyAgICAgY29udGV4dD1wYXltZW50X2luZm8uY29weSgpLCAgIyBUT0RPOiBBZGQgaW5mbyBvbiBmYWlsZWQgcGF5bWVudAogICAgLy8gKQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgwMDEyCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBzd2FwCiAgICByZXRzdWIKCnBheV9wcmluY2lwYWxfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxNTEtMTUyCiAgICAvLyAjIEFjY291bnRzIHN1c3BlbmRlZCBvciBub3Qgb3B0ZWQgaW4gYXQgdGhlIHRpbWUgb2YgcGF5bWVudHMgbXVzdCBub3Qgc3RhbGwgdGhlIEQtQVNBCiAgICAvLyBwYXltZW50X2Ftb3VudCA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgYiBwYXlfcHJpbmNpcGFsX2FmdGVyX2lmX2Vsc2VAMwoKcGF5X3ByaW5jaXBhbF9ib29sX2ZhbHNlQDE2OgogICAgaW50Y18wIC8vIDAKICAgIGIgcGF5X3ByaW5jaXBhbF9ib29sX21lcmdlQDE3CgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2EuYWNjb3VudF90b3RhbF91bml0c192YWx1ZShob2xkaW5nX2FkZHJlc3M6IGJ5dGVzKSAtPiB1aW50NjQ6CmFjY291bnRfdG90YWxfdW5pdHNfdmFsdWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozNDMtMzQ0CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGFjY291bnRfdG90YWxfdW5pdHNfdmFsdWUoc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBhcmM0LkFkZHJlc3MpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MzQ2CiAgICAvLyBob2xkaW5nX2FkZHJlc3MsIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZQogICAgYnl0ZWNfMiAvLyAweDUyMzMzMDIzCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYWNjb3VudCBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMzIgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjM0NS0zNDcKICAgIC8vIHJldHVybiBzZWxmLmFjY291bnRfdW5pdHNfdmFsdWUoCiAgICAvLyAgICAgaG9sZGluZ19hZGRyZXNzLCBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cy5uYXRpdmUKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgY2FsbHN1YiBhY2NvdW50X3VuaXRzX3ZhbHVlCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5lbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHMoKSAtPiB2b2lkOgplbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozNTktMzYwCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGVuZF9pZl9ub19jaXJjdWxhdGluZ191bml0cyhzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozNjEKICAgIC8vIGlmIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgPT0gMDoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJjaXJjdWxhdGluZ191bml0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaXJjdWxhdGluZ191bml0cyBleGlzdHMKICAgIGJueiBlbmRfaWZfbm9fY2lyY3VsYXRpbmdfdW5pdHNfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTozNjIKICAgIC8vIHNlbGYuc3RhdHVzID0gVUludDY0KGNmZy5TVEFUVVNfRU5ERUQpCiAgICBieXRlY18zIC8vICJzdGF0dXMiCiAgICBpbnRjIDcgLy8gMjAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKZW5kX2lmX25vX2NpcmN1bGF0aW5nX3VuaXRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy56ZXJvX2NvdXBvbl9ib25kLmNvbnRyYWN0Llplcm9Db3Vwb25Cb25kLmdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWUoaG9sZGluZ19hZGRyZXNzOiBieXRlcywgdW5pdHM6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE2MS0xNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWUoCiAgICAvLyAgICAgc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBhcmM0LkFkZHJlc3MsIHVuaXRzOiBhcmM0LlVJbnQ2NAogICAgLy8gKSAtPiB0eXAuQ3VycmVudFVuaXRzVmFsdWU6CiAgICBwcm90byAyIDEKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTgxCiAgICAvLyBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDkgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxODEtMTgyCiAgICAvLyBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgLy8gYW5kIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wID49IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICBieiBnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTgyCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIGV4aXN0cwogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE4MS0xODIKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICAvLyBhbmQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPj0gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIGJ6IGdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9mYWxzZUAzCiAgICBpbnRjXzEgLy8gMQoKZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX21lcmdlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxODAtMTgzCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICAvLyAgICAgYW5kIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wID49IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICAvLyApLCBlcnIuTk9fUFJJTUFSWV9ESVNUUklCVVRJT04KICAgIGFzc2VydCAvLyBQcmltYXJ5IGRpc3RyaWJ1dGlvbiBub3QgeWV0IGV4ZWN1dGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxNzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzIgLy8gMHg1MjMzMzAyMwogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxODYKICAgIC8vIDAgPCB1bml0cyA8PSBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cy5uYXRpdmUKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWMgNyAvLyAweDAwMDAwMDAwMDAwMDAwMDAKICAgIGI+CiAgICBieiBnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2Jvb2xfZmFsc2VANwogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDMyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+PQogICAgYnogZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX2ZhbHNlQDcKICAgIGludGNfMSAvLyAxCgpnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2Jvb2xfbWVyZ2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE4NS0xODcKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgMCA8IHVuaXRzIDw9IHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZQogICAgLy8gKSwgZXJyLklOVkFMSURfVU5JVFMKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFtb3VudCBvZiB1bml0cyBmb3IgdGhlIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gaG9sZGluZ19hZGRyZXNzLCB1bml0cy5uYXRpdmUKICAgIGZyYW1lX2RpZyAtMQogICAgYnRvaQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjE4OS0xOTEKICAgIC8vIGFjY291bnRfdW5pdHNfbm9taW5hbF92YWx1ZSA9IHNlbGYuYWNjb3VudF91bml0c192YWx1ZSgKICAgIC8vICAgICBob2xkaW5nX2FkZHJlc3MsIHVuaXRzLm5hdGl2ZQogICAgLy8gKQogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBjYWxsc3ViIGFjY291bnRfdW5pdHNfdmFsdWUKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxOTMKICAgIC8vIGFjY291bnRfdW5pdHNfbm9taW5hbF92YWx1ZSAqIHNlbGYuaW50ZXJlc3RfcmF0ZSAvLyBjc3QuQlBTCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiaW50ZXJlc3RfcmF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pbnRlcmVzdF9yYXRlIGV4aXN0cwogICAgZGlnIDEKICAgICoKICAgIGludGMgNSAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MTk4CiAgICAvLyBhY2NvdW50X3VuaXRzX25vbWluYWxfdmFsdWUgLSBhY2NvdW50X3VuaXRzX2Rpc2NvdW50CiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToxOTYtMTk5CiAgICAvLyAjIFZhbHVlIGR1cmluZyBwcmltYXJ5IGRpc3RyaWJ1dGlvbgogICAgLy8gYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlID0gKAogICAgLy8gICAgIGFjY291bnRfdW5pdHNfbm9taW5hbF92YWx1ZSAtIGFjY291bnRfdW5pdHNfZGlzY291bnQKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjAxLTIwMgogICAgLy8gIyBBY2NydWluZyBpbnRlcmVzdCBkdXJpbmcgcHJpbWFyeSBkaXN0cmlidXRpb24gYW5kIGF0IG1hdHVyaXR5CiAgICAvLyBhY2NydWVkX2ludGVyZXN0ID0gVUludDY0KCkKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjIwMwogICAgLy8gbnVtZXJhdG9yID0gVUludDY0KCkKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjIwNAogICAgLy8gZGVub21pbmF0b3IgPSBVSW50NjQoKQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6NTYtNTcKICAgIC8vICMgVGhlIGNoZWNrIG9uIG1hdHVyaXR5IGRhdGUgZW5zdXJlcyBELUFTQSBoYXMgYmVlbiBjb25maWd1cmVkIGFzIGJsb2NrIHRpbWVzdGFtcCBjYW5ub3QgYmUgbGVzcyB0aGFuIDAgKGluaXQpLgogICAgLy8gcmV0dXJuIHNlbGYuaXNzdWFuY2VfZGF0ZSA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA8IHNlbGYubWF0dXJpdHlfZGF0ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImlzc3VhbmNlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaXNzdWFuY2VfZGF0ZSBleGlzdHMKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGR1cAogICAgZnJhbWVfYnVyeSA0CiAgICA8PQogICAgYnogZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX2ZhbHNlQDE2CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXR1cml0eV9kYXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDQKICAgID4KICAgIGJ6IGdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9mYWxzZUAxNgogICAgaW50Y18xIC8vIDEKCmdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9tZXJnZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjIwNi0yMDcKICAgIC8vICMgQWNjcnVpbmcgaW50ZXJlc3QKICAgIC8vIGlmIHNlbGYuaXNfYWNjcnVpbmdfaW50ZXJlc3QoKToKICAgIGJ6IGdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYWZ0ZXJfaWZfZWxzZUAxMAogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjA4CiAgICAvLyBkYXlfY291bnRfZmFjdG9yID0gc2VsZi5kYXlfY291bnRfZmFjdG9yKCkKICAgIGNhbGxzdWIgZGF5X2NvdW50X2ZhY3RvcgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjA5LTIxMQogICAgLy8gYWNjcnVlZF9pbnRlcmVzdCA9IHNlbGYuYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQoCiAgICAvLyAgICAgaG9sZGluZ19hZGRyZXNzLCB1bml0cy5uYXRpdmUKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIDcKICAgIGNhbGxzdWIgYWNjcnVlZF9pbnRlcmVzdF9hbW91bnQKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjEyCiAgICAvLyBudW1lcmF0b3IgPSBkYXlfY291bnRfZmFjdG9yLm51bWVyYXRvci5uYXRpdmUKICAgIGR1cAogICAgZXh0cmFjdCAwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBmcmFtZV9idXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjIxMwogICAgLy8gZGVub21pbmF0b3IgPSBkYXlfY291bnRfZmFjdG9yLmRlbm9taW5hdG9yLm5hdGl2ZQogICAgZXh0cmFjdCA4IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBmcmFtZV9idXJ5IDUKCmdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjIxNS0yMTYKICAgIC8vICMgVmFsdWUgYXQgbWF0dXJpdHkKICAgIC8vIGlmIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wID49IHNlbGYubWF0dXJpdHlfZGF0ZToKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJtYXR1cml0eV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdHVyaXR5X2RhdGUgZXhpc3RzCiAgICA+PQogICAgYnogZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9hZnRlcl9pZl9lbHNlQDEyCiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCgpnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToyMjAKICAgIC8vIHVuaXRzX3ZhbHVlPWFyYzQuVUludDY0KGFjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZSksCiAgICBmcmFtZV9kaWcgMQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjIxCiAgICAvLyBhY2NydWVkX2ludGVyZXN0PWFyYzQuVUludDY0KGFjY3J1ZWRfaW50ZXJlc3QpLAogICAgZnJhbWVfZGlnIDMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gbnVtZXJhdG9yPWFyYzQuVUludDY0KG51bWVyYXRvciksCiAgICBmcmFtZV9kaWcgNgogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjI0CiAgICAvLyBkZW5vbWluYXRvcj1hcmM0LlVJbnQ2NChkZW5vbWluYXRvciksCiAgICBmcmFtZV9kaWcgNQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjIyLTIyNQogICAgLy8gZGF5X2NvdW50X2ZhY3Rvcj10eXAuRGF5Q291bnRGYWN0b3IoCiAgICAvLyAgICAgbnVtZXJhdG9yPWFyYzQuVUludDY0KG51bWVyYXRvciksCiAgICAvLyAgICAgZGVub21pbmF0b3I9YXJjNC5VSW50NjQoZGVub21pbmF0b3IpLAogICAgLy8gKSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjE5LTIyNgogICAgLy8gcmV0dXJuIHR5cC5DdXJyZW50VW5pdHNWYWx1ZSgKICAgIC8vICAgICB1bml0c192YWx1ZT1hcmM0LlVJbnQ2NChhY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWUpLAogICAgLy8gICAgIGFjY3J1ZWRfaW50ZXJlc3Q9YXJjNC5VSW50NjQoYWNjcnVlZF9pbnRlcmVzdCksCiAgICAvLyAgICAgZGF5X2NvdW50X2ZhY3Rvcj10eXAuRGF5Q291bnRGYWN0b3IoCiAgICAvLyAgICAgICAgIG51bWVyYXRvcj1hcmM0LlVJbnQ2NChudW1lcmF0b3IpLAogICAgLy8gICAgICAgICBkZW5vbWluYXRvcj1hcmM0LlVJbnQ2NChkZW5vbWluYXRvciksCiAgICAvLyAgICAgKSwKICAgIC8vICkKICAgIGNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX2ZhbHNlQDE2OgogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0X2FjY291bnRfdW5pdHNfY3VycmVudF92YWx1ZV9ib29sX21lcmdlQDE3CgpnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2Jvb2xfZmFsc2VANzoKICAgIGludGNfMCAvLyAwCiAgICBiIGdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9tZXJnZUA4CgpnZXRfYWNjb3VudF91bml0c19jdXJyZW50X3ZhbHVlX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICBiIGdldF9hY2NvdW50X3VuaXRzX2N1cnJlbnRfdmFsdWVfYm9vbF9tZXJnZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLnplcm9fY291cG9uX2JvbmQuY29udHJhY3QuWmVyb0NvdXBvbkJvbmQuZ2V0X3BheW1lbnRfYW1vdW50KGhvbGRpbmdfYWRkcmVzczogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfcGF5bWVudF9hbW91bnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToyMjgtMjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfcGF5bWVudF9hbW91bnQoc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBhcmM0LkFkZHJlc3MpIC0+IHR5cC5QYXltZW50QW1vdW50czoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTcxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlY18yIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToyNDQKICAgIC8vIGludGVyZXN0X2Ftb3VudCA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjQ1CiAgICAvLyBwcmluY2lwYWxfYW1vdW50ID0gVUludDY0KCkKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTAxCiAgICAvLyByZXR1cm4gc2VsZi5zdGF0dXMgPT0gY2ZnLlNUQVRVU19BQ1RJVkUKICAgIGJ5dGVjXzMgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDEwMCAvLyAxMDAKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToyNDYKICAgIC8vIGlmIHNlbGYuc3RhdHVzX2lzX2FjdGl2ZSgpOgogICAgYnogZ2V0X3BheW1lbnRfYW1vdW50X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjQ3CiAgICAvLyBwcmluY2lwYWxfYW1vdW50ID0gc2VsZi5hY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlKGhvbGRpbmdfYWRkcmVzcykKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBhY2NvdW50X3RvdGFsX3VuaXRzX3ZhbHVlCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3plcm9fY291cG9uX2JvbmQvY29udHJhY3QucHk6MjQ4CiAgICAvLyBpbnRlcmVzdF9hbW91bnQgPSBwcmluY2lwYWxfYW1vdW50ICogc2VsZi5pbnRlcmVzdF9yYXRlIC8vIGNzdC5CUFMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJpbnRlcmVzdF9yYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmludGVyZXN0X3JhdGUgZXhpc3RzCiAgICAqCiAgICBpbnRjIDUgLy8gMTAwMDAKICAgIC8KICAgIGZyYW1lX2J1cnkgMAoKZ2V0X3BheW1lbnRfYW1vdW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy96ZXJvX2NvdXBvbl9ib25kL2NvbnRyYWN0LnB5OjI1MAogICAgLy8gaW50ZXJlc3Q9YXJjNC5VSW50NjQoaW50ZXJlc3RfYW1vdW50KSwKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToyNTEKICAgIC8vIHByaW5jaXBhbD1hcmM0LlVJbnQ2NChwcmluY2lwYWxfYW1vdW50KSwKICAgIGZyYW1lX2RpZyAxCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvemVyb19jb3Vwb25fYm9uZC9jb250cmFjdC5weToyNDktMjUyCiAgICAvLyByZXR1cm4gdHlwLlBheW1lbnRBbW91bnRzKAogICAgLy8gICAgIGludGVyZXN0PWFyYzQuVUludDY0KGludGVyZXN0X2Ftb3VudCksCiAgICAvLyAgICAgcHJpbmNpcGFsPWFyYzQuVUludDY0KHByaW5jaXBhbF9hbW91bnQpLAogICAgLy8gKQogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5iYXNlX2RfYXNhLmNvbnRyYWN0LkJhc2VEQXNhLmFzc2V0X2NyZWF0ZShhcnJhbmdlcjogYnl0ZXMsIG1ldGFkYXRhOiBieXRlcykgLT4gdm9pZDoKYXNzZXRfY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDU2LTQ1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICAvLyBkZWYgYXNzZXRfY3JlYXRlKHNlbGYsIGFycmFuZ2VyOiBhcmM0LkFkZHJlc3MsIG1ldGFkYXRhOiB0eXAuQXNzZXRNZXRhZGF0YSkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDY1CiAgICAvLyBzZWxmLmFycmFuZ2VyLnZhbHVlID0gYXJyYW5nZXIubmF0aXZlCiAgICBieXRlYyAxNyAvLyAweDUyMzIzMDIzCiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo0NjYKICAgIC8vIHNlbGYubWV0YWRhdGEgPSBtZXRhZGF0YS5ieXRlcwogICAgYnl0ZWMgMjIgLy8gIm1ldGFkYXRhIgogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2EuYXNzZXRfY29uZmlnKGRlbm9taW5hdGlvbl9hc3NldF9pZDogYnl0ZXMsIHNldHRsZW1lbnRfYXNzZXRfaWQ6IGJ5dGVzLCBwcmluY2lwYWw6IGJ5dGVzLCBtaW5pbXVtX2Rlbm9taW5hdGlvbjogYnl0ZXMsIGRheV9jb3VudF9jb252ZW50aW9uOiBieXRlcywgaW50ZXJlc3RfcmF0ZTogYnl0ZXMsIGNvdXBvbl9yYXRlczogYnl0ZXMsIHRpbWVfZXZlbnRzOiBieXRlcywgdGltZV9wZXJpb2RzOiBieXRlcykgLT4gdm9pZDoKYXNzZXRfY29uZmlnOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NDc4LTQ5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzZXRfY29uZmlnKAogICAgLy8gICAgIHNlbGYsCiAgICAvLyAgICAgZGVub21pbmF0aW9uX2Fzc2V0X2lkOiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBzZXR0bGVtZW50X2Fzc2V0X2lkOiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBwcmluY2lwYWw6IGFyYzQuVUludDY0LAogICAgLy8gICAgIG1pbmltdW1fZGVub21pbmF0aW9uOiBhcmM0LlVJbnQ2NCwKICAgIC8vICAgICBkYXlfY291bnRfY29udmVudGlvbjogYXJjNC5VSW50OCwKICAgIC8vICAgICBpbnRlcmVzdF9yYXRlOiBhcmM0LlVJbnQxNiwKICAgIC8vICAgICBjb3Vwb25fcmF0ZXM6IHR5cC5Db3Vwb25SYXRlcywKICAgIC8vICAgICB0aW1lX2V2ZW50czogdHlwLlRpbWVFdmVudHMsCiAgICAvLyAgICAgdGltZV9wZXJpb2RzOiB0eXAuVGltZVBlcmlvZHMsCiAgICAvLyApIC0+IE5vbmU6CiAgICBwcm90byA5IDAKICAgIGludGNfMCAvLyAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTE5CiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo1MjAKICAgIC8vIGFzc2VydCBzZWxmLnN0YXR1cyA9PSBjZmcuU1RBVFVTX0VNUFRZLCBlcnIuQUxSRUFEWV9DT05GSUdVUkVECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBELUFTQSBhbHJlYWR5IGNvbmZpZ3VyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjUyMi01MjMKICAgIC8vICMgU2V0IERlbm9taW5hdGlvbiBBc3NldAogICAgLy8gc2VsZi5hc3NlcnRfZGVub21pbmF0aW9uX2Fzc2V0KGRlbm9taW5hdGlvbl9hc3NldF9pZC5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTkKICAgIGJ0b2kKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTc3CiAgICAvLyBkZW5vbWluYXRpb25fYXNzZXRfaWQgIT0gVUludDY0KDApIGFuZCBBc3NldChkZW5vbWluYXRpb25fYXNzZXRfaWQpLmNyZWF0b3IKICAgIGJ6IGFzc2V0X2NvbmZpZ19ib29sX2ZhbHNlQDQKICAgIGZyYW1lX2RpZyAzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogYXNzZXRfY29uZmlnX2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCmFzc2V0X2NvbmZpZ19ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxNzUtMTc4CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaGFzIG9uLWNoYWluIGRlbm9taW5hdGlvbiB3aXRoIEFTQQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBkZW5vbWluYXRpb25fYXNzZXRfaWQgIT0gVUludDY0KDApIGFuZCBBc3NldChkZW5vbWluYXRpb25fYXNzZXRfaWQpLmNyZWF0b3IKICAgIC8vICksIGVyci5JTlZBTElEX0RFTk9NSU5BVElPTgogICAgYXNzZXJ0IC8vIERlbm9taW5hdGlvbiBhc3NldCBpcyBub3QgcHJvcGVybHkgc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxODIKICAgIC8vIHNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkID0gZGVub21pbmF0aW9uX2Fzc2V0X2lkCiAgICBieXRlYyAxOCAvLyAiZGVub21pbmF0aW9uX2Fzc2V0X2lkIgogICAgZnJhbWVfZGlnIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo1MjYtNTI3CiAgICAvLyAjIFNldCBEZW5vbWluYXRpb24gQXNzZXQKICAgIC8vIHNlbGYuYXNzZXJ0X3NldHRsZW1lbnRfYXNzZXQoc2V0dGxlbWVudF9hc3NldF9pZC5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTgKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE4OAogICAgLy8gc2V0dGxlbWVudF9hc3NldF9pZCA9PSBzZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE4IC8vICJkZW5vbWluYXRpb25fYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkIGV4aXN0cwogICAgZGlnIDEKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxODYtMTg5CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gc2V0dGxlbWVudCBhc3NldCBpcyB0aGUgZGVub21pbmF0aW9uIGFzc2V0CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNldHRsZW1lbnRfYXNzZXRfaWQgPT0gc2VsZi5kZW5vbWluYXRpb25fYXNzZXRfaWQKICAgIC8vICksIGVyci5JTlZBTElEX1NFVFRMRU1FTlRfQVNTRVQKICAgIGFzc2VydCAvLyBEaWZmZXJlbnQgc2V0dGxlbWVudCBhc3NldCBub3Qgc3VwcG9ydGVkLCBtdXN0IGJlIGVxdWFsIHRvIGRlbm9taW5hdGlvbiBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTkzCiAgICAvLyBzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQgPSBzZXR0bGVtZW50X2Fzc2V0X2lkCiAgICBieXRlYyA1IC8vICJzZXR0bGVtZW50X2Fzc2V0X2lkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE5NC0yMDAKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBoYXMgb24tY2hhaW4gc2V0dGxlbWVudCB3aXRoIEFTQQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIHhmZXJfYXNzZXQ9c2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkLAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PTAsCiAgICAvLyAgICAgZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE5OQogICAgLy8gZmVlPUdsb2JhbC5taW5fdHhuX2ZlZSwKICAgIGdsb2JhbCBNaW5UeG5GZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE5NgogICAgLy8geGZlcl9hc3NldD1zZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAic2V0dGxlbWVudF9hc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zZXR0bGVtZW50X2Fzc2V0X2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTk3CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE5OAogICAgLy8gYXNzZXRfYW1vdW50PTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTk0LTE5NQogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBvbi1jaGFpbiBzZXR0bGVtZW50IHdpdGggQVNBCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBpbnRjXzMgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxOTQtMjAwCiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaGFzIG9uLWNoYWluIHNldHRsZW1lbnQgd2l0aCBBU0EKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICB4ZmVyX2Fzc2V0PXNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCwKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGZlZT1HbG9iYWwubWluX3R4bl9mZWUsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTMyCiAgICAvLyBwcmluY2lwYWwubmF0aXZlICUgbWluaW11bV9kZW5vbWluYXRpb24ubmF0aXZlID09IDAKICAgIGZyYW1lX2RpZyAtNwogICAgYnRvaQogICAgZnJhbWVfZGlnIC02CiAgICBidG9pCiAgICBkdXAyCiAgICAlCiAgICAhCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo1MzAtNTMzCiAgICAvLyAjIFNldCBQcmluY2lwYWwgYW5kIE1pbmltdW0gRGVub21pbmF0aW9uCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHByaW5jaXBhbC5uYXRpdmUgJSBtaW5pbXVtX2Rlbm9taW5hdGlvbi5uYXRpdmUgPT0gMAogICAgLy8gKSwgZXJyLklOVkFMSURfTUlOSU1VTV9ERU5PTUlOQVRJT04KICAgIGFzc2VydCAvLyBNaW5pbXVtIGRlbm9taW5hdGlvbiBpcyBub3QgYSBkaXZpc29yIG9mIHByaW5jaXBhbAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTM0CiAgICAvLyBzZWxmLnVuaXRfdmFsdWUgPSBtaW5pbXVtX2Rlbm9taW5hdGlvbi5uYXRpdmUKICAgIGJ5dGVjIDEwIC8vICJ1bml0X3ZhbHVlIgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo1MzUKICAgIC8vIHNlbGYudG90YWxfdW5pdHMgPSBwcmluY2lwYWwubmF0aXZlIC8vIG1pbmltdW1fZGVub21pbmF0aW9uLm5hdGl2ZQogICAgLwogICAgYnl0ZWMgMTIgLy8gInRvdGFsX3VuaXRzIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjUzNy01MzgKICAgIC8vICMgU2V0IERheS1Db3VudCBDb252ZW50aW9uCiAgICAvLyBzZWxmLmFzc2VydF9kYXlfY291bnRfY29udmVudGlvbihkYXlfY291bnRfY29udmVudGlvbi5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTUKICAgIGJ0b2kKICAgIGR1cAogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyMDQtMjA4CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSB0aGUgQWN0dWFsL0FjdHVhbCBhbmQgQ29udGludW91cyBkYXktY291bnQgY29udmVudGlvbnMKICAgIC8vIGFzc2VydCBkYXlfY291bnRfY29udmVudGlvbiBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5EQ0NfQV9BKSwKICAgIC8vICAgICBVSW50NjQoY3N0LkRDQ19DT05UKSwKICAgIC8vICksIGVyci5JTlZBTElEX0RBWV9DT1VOVF9DT05WRU5USU9OCiAgICBieiBhc3NldF9jb25maWdfYm9vbF90cnVlQDE2CiAgICBmcmFtZV9kaWcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjA3CiAgICAvLyBVSW50NjQoY3N0LkRDQ19DT05UKSwKICAgIHB1c2hpbnQgMjU1IC8vIDI1NQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjA0LTIwOAogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgdGhlIEFjdHVhbC9BY3R1YWwgYW5kIENvbnRpbnVvdXMgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgZGF5X2NvdW50X2NvbnZlbnRpb24gaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuRENDX0FfQSksCiAgICAvLyAgICAgVUludDY0KGNzdC5EQ0NfQ09OVCksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9EQVlfQ09VTlRfQ09OVkVOVElPTgogICAgPT0KICAgIGJ6IGFzc2V0X2NvbmZpZ19ib29sX2ZhbHNlQDE3Cgphc3NldF9jb25maWdfYm9vbF90cnVlQDE2OgogICAgaW50Y18xIC8vIDEKCmFzc2V0X2NvbmZpZ19ib29sX21lcmdlQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjA0LTIwOAogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG9ubHkgdGhlIEFjdHVhbC9BY3R1YWwgYW5kIENvbnRpbnVvdXMgZGF5LWNvdW50IGNvbnZlbnRpb25zCiAgICAvLyBhc3NlcnQgZGF5X2NvdW50X2NvbnZlbnRpb24gaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuRENDX0FfQSksCiAgICAvLyAgICAgVUludDY0KGNzdC5EQ0NfQ09OVCksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9EQVlfQ09VTlRfQ09OVkVOVElPTgogICAgYXNzZXJ0IC8vIEludmFsaWQgZGF5LWNvdW50IGNvbnZlbnRpb24gSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjIxMgogICAgLy8gc2VsZi5kYXlfY291bnRfY29udmVudGlvbiA9IGRheV9jb3VudF9jb252ZW50aW9uCiAgICBieXRlYyAxMSAvLyAiZGF5X2NvdW50X2NvbnZlbnRpb24iCiAgICBmcmFtZV9kaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU0MS01NDIKICAgIC8vICMgU2V0IEludGVyZXN0IFJhdGUKICAgIC8vIHNlbGYuYXNzZXJ0X2ludGVyZXN0X3JhdGUoaW50ZXJlc3RfcmF0ZS5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gYXNzZXJ0IGludGVyZXN0X3JhdGUgPiBVSW50NjQoMCksIGVyci5JTlZBTElEX0lOVEVSRVNUX1JBVEUKICAgIGR1cAogICAgYXNzZXJ0IC8vIEludGVyZXN0IHJhdGUgaXMgbm90IHByb3Blcmx5IGRlZmluZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjIyMAogICAgLy8gc2VsZi5pbnRlcmVzdF9yYXRlID0gaW50ZXJlc3RfcmF0ZQogICAgYnl0ZWMgOCAvLyAiaW50ZXJlc3RfcmF0ZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyMjQKICAgIC8vIGFzc2VydCBub3QgY291cG9uX3JhdGVzLmxlbmd0aCwgZXJyLklOVkFMSURfQ09VUE9OX1JBVEVTCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICAhCiAgICBhc3NlcnQgLy8gQ291cG9uIHJhdGVzIGFyZSBub3QgcHJvcGVybHkgZGVmaW5lZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjI4CiAgICAvLyBzZWxmLnRvdGFsX2NvdXBvbnMgPSBjb3Vwb25fcmF0ZXMubGVuZ3RoCiAgICBieXRlYyAxMyAvLyAidG90YWxfY291cG9ucyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyMjkKICAgIC8vIGlmIHNlbGYudG90YWxfY291cG9uczoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAidG90YWxfY291cG9ucyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF9jb3Vwb25zIGV4aXN0cwogICAgYnogYXNzZXRfY29uZmlnX2FmdGVyX2lmX2Vsc2VAMzAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gc2VsZi5jb3Vwb25fcmF0ZXMudmFsdWUgPSBjb3Vwb25fcmF0ZXMuY29weSgpCiAgICBieXRlYyAyOCAvLyAweDYzNmY3NTcwNmY2ZTUyNjE3NDY1NzMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgMjggLy8gMHg2MzZmNzU3MDZmNmU1MjYxNzQ2NTczCiAgICBmcmFtZV9kaWcgLTMKICAgIGJveF9wdXQKCmFzc2V0X2NvbmZpZ19hZnRlcl9pZl9lbHNlQDMwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjM1CiAgICAvLyB0aW1lX2V2ZW50cy5sZW5ndGggPT0gc2VsZi50b3RhbF9jb3Vwb25zICsgY2ZnLlRJTUVfU0NIRURVTEVfTElNSVRTCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEzIC8vICJ0b3RhbF9jb3Vwb25zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX2NvdXBvbnMgZXhpc3RzCiAgICBpbnRjXzMgLy8gNAogICAgKwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjIzNC0yMzYKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgdGltZV9ldmVudHMubGVuZ3RoID09IHNlbGYudG90YWxfY291cG9ucyArIGNmZy5USU1FX1NDSEVEVUxFX0xJTUlUUwogICAgLy8gKSwgZXJyLklOVkFMSURfVElNRV9FVkVOVFNfTEVOR1RICiAgICBhc3NlcnQgLy8gVGltZSBldmVudHMgbGVuZ3RoIGlzIGludmFsaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU1MQogICAgLy8gc2VsZi5hc3NlcnRfdGltZV9ldmVudHNfc29ydGVkKHRpbWVfZXZlbnRzKQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQKICAgIGZyYW1lX2J1cnkgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI2MAogICAgLy8gc2VsZi50aW1lX2V2ZW50cy52YWx1ZSA9IHRpbWVfZXZlbnRzLmNvcHkoKQogICAgYnl0ZWMgMjMgLy8gMHg3NDY5NmQ2NTQ1NzY2NTZlNzQ3MwogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyAyMyAvLyAweDc0Njk2ZDY1NDU3NjY1NmU3NDczCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI2MS0yNjMKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlID0gdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX09QRU5JTkdfREFURV9JRFgKICAgIC8vIF0ubmF0aXZlCiAgICBmcmFtZV9kaWcgLTIKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgZHVwCiAgICBleHRyYWN0IDAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI2MQogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUgPSB0aW1lX2V2ZW50c1sKICAgIGJ5dGVjIDkgLy8gInByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI2MS0yNjMKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlID0gdGltZV9ldmVudHNbCiAgICAvLyAgICAgY2ZnLlBSSU1BUllfRElTVFJJQlVUSU9OX09QRU5JTkdfREFURV9JRFgKICAgIC8vIF0ubmF0aXZlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjY0LTI2NgogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUgPSB0aW1lX2V2ZW50c1sKICAgIC8vICAgICBjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fQ0xPU1VSRV9EQVRFX0lEWAogICAgLy8gXS5uYXRpdmUKICAgIGR1cAogICAgZXh0cmFjdCA4IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyNjQKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlID0gdGltZV9ldmVudHNbCiAgICBieXRlYyAxOSAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjY0LTI2NgogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUgPSB0aW1lX2V2ZW50c1sKICAgIC8vICAgICBjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fQ0xPU1VSRV9EQVRFX0lEWAogICAgLy8gXS5uYXRpdmUKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyNjcKICAgIC8vIHNlbGYuaXNzdWFuY2VfZGF0ZSA9IHRpbWVfZXZlbnRzW2NmZy5JU1NVQU5DRV9EQVRFX0lEWF0ubmF0aXZlCiAgICBleHRyYWN0IDE2IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBieXRlYyA2IC8vICJpc3N1YW5jZV9kYXRlIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI2OS0yNzAKICAgIC8vICMgU29tZSBELUFTQSBtYXkgbm90IGhhdmUgYSBtYXR1cml0eSBkYXRlIChlLmcuLCBwZXJwZXR1YWxzKQogICAgLy8gaWYgdGltZV9ldmVudHMubGVuZ3RoID09IHNlbGYudG90YWxfY291cG9ucyArIGNmZy5USU1FX1NDSEVEVUxFX0xJTUlUUzoKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEzIC8vICJ0b3RhbF9jb3Vwb25zIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX2NvdXBvbnMgZXhpc3RzCiAgICBpbnRjXzMgLy8gNAogICAgKwogICAgPT0KICAgIGJ6IGFzc2V0X2NvbmZpZ19hZnRlcl9pZl9lbHNlQDM2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyNzEKICAgIC8vIHNlbGYubWF0dXJpdHlfZGF0ZSA9IHRpbWVfZXZlbnRzW2NmZy5NQVRVUklUWV9EQVRFX0lEWF0ubmF0aXZlCiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgYnl0ZWMgNCAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0Cgphc3NldF9jb25maWdfYWZ0ZXJfaWZfZWxzZUAzNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI3NQogICAgLy8gYXNzZXJ0IG5vdCB0aW1lX3BlcmlvZHMubGVuZ3RoLCBlcnIuSU5WQUxJRF9USU1FX1BFUklPRFMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAhCiAgICBhc3NlcnQgLy8gVGltZSBwZXJpb2RzIGFyZSBub3QgcHJvcGVybHkgZGVmaW5lZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTU4CiAgICAvLyBzZWxmLnN0YXR1cyA9IFVJbnQ2NChjZmcuU1RBVFVTX0FDVElWRSkKICAgIGJ5dGVjXzMgLy8gInN0YXR1cyIKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKYXNzZXRfY29uZmlnX2Jvb2xfZmFsc2VAMTc6CiAgICBpbnRjXzAgLy8gMAogICAgYiBhc3NldF9jb25maWdfYm9vbF9tZXJnZUAxOAoKYXNzZXRfY29uZmlnX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFzc2V0X2NvbmZpZ19ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkgLT4gdm9pZDoKYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjExNS0xMTYKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcihzZWxmKSAtPiBOb25lOgogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMTcKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYuYXJyYW5nZXIudmFsdWUsIGVyci5VTkFVVEhPUklaRUQKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAweDUyMzIzMDIzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXJyYW5nZXIgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5hc3NlcnRfdGltZV9ldmVudHNfc29ydGVkKHRpbWVfZXZlbnRzOiBieXRlcykgLT4gYnl0ZXM6CmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyMzgtMjM5CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWQoc2VsZiwgdGltZV9ldmVudHM6IHR5cC5UaW1lRXZlbnRzKSAtPiBOb25lOgogICAgcHJvdG8gMSAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjQxCiAgICAvLyB0aW1lX2V2ZW50c1tjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fT1BFTklOR19EQVRFX0lEWF0ubmF0aXZlCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGV4dHJhY3QgMCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjQyCiAgICAvLyA+IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyNDEtMjQyCiAgICAvLyB0aW1lX2V2ZW50c1tjZmcuUFJJTUFSWV9ESVNUUklCVVRJT05fT1BFTklOR19EQVRFX0lEWF0ubmF0aXZlCiAgICAvLyA+IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICA+CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyNDAtMjQzCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHRpbWVfZXZlbnRzW2NmZy5QUklNQVJZX0RJU1RSSUJVVElPTl9PUEVOSU5HX0RBVEVfSURYXS5uYXRpdmUKICAgIC8vICAgICA+IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyApLCBlcnIuSU5WQUxJRF9USU1FCiAgICBhc3NlcnQgLy8gVGltZSBldmVudHMgbXVzdCBiZSBzZXQgaW4gdGhlIGZ1dHVyZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjQ0CiAgICAvLyBmb3IgX3QgaW4gdXJhbmdlKHRpbWVfZXZlbnRzLmxlbmd0aCAtIDEpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBpbnRjXzAgLy8gMAoKYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZF9mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyNDQKICAgIC8vIGZvciBfdCBpbiB1cmFuZ2UodGltZV9ldmVudHMubGVuZ3RoIC0gMSk6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDMKICAgIDwKICAgIGJ6IGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWRfYWZ0ZXJfZm9yQDYKCmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWRfd2hpbGVfdG9wQDg6CiAgICBwdXNoaW50IDc1IC8vIDc1CiAgICBnbG9iYWwgT3Bjb2RlQnVkZ2V0CiAgICA+CiAgICBieiBhc3NlcnRfdGltZV9ldmVudHNfc29ydGVkX2FmdGVyX3doaWxlQDE0CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMjkgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAyOSAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBiIGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWRfd2hpbGVfdG9wQDgKCmFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWRfYWZ0ZXJfd2hpbGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyNDkKICAgIC8vIHRpbWVfaSA9IHRpbWVfZXZlbnRzW190XS5uYXRpdmUKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjUwCiAgICAvLyB0aW1lX2YgPSB0aW1lX2V2ZW50c1tfdCArIDFdLm5hdGl2ZQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI1MQogICAgLy8gYXNzZXJ0IHRpbWVfZiA+IHRpbWVfaSwgZXJyLklOVkFMSURfU09SVElORwogICAgPAogICAgYXNzZXJ0IC8vIFRpbWUgZXZlbnRzIG11c3QgYmUgc29ydGVkIGluIHN0cmljdGx5IGFzY2VuZGluZyBvcmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjUyCiAgICAvLyBpZiBzZWxmLmRheV9jb3VudF9jb252ZW50aW9uICE9IFVJbnQ2NChjc3QuRENDX0NPTlQpOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJkYXlfY291bnRfY29udmVudGlvbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kYXlfY291bnRfY29udmVudGlvbiBleGlzdHMKICAgIHB1c2hpbnQgMjU1IC8vIDI1NQogICAgIT0KICAgIGJ6IGFzc2VydF90aW1lX2V2ZW50c19zb3J0ZWRfZm9yX2hlYWRlckAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyNTMtMjU0CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGltZSBwZXJpb2RzIGV4cHJlc3NlZCBpbiBkYXlzIGZvciByZWd1bGFyIGRheS1jb3VudCBjb252ZW50aW9ucwogICAgLy8gYXNzZXJ0ICh0aW1lX2YgLSB0aW1lX2kpICUgVUludDY0KAogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyNTMtMjU2CiAgICAvLyAjIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGltZSBwZXJpb2RzIGV4cHJlc3NlZCBpbiBkYXlzIGZvciByZWd1bGFyIGRheS1jb3VudCBjb252ZW50aW9ucwogICAgLy8gYXNzZXJ0ICh0aW1lX2YgLSB0aW1lX2kpICUgVUludDY0KAogICAgLy8gICAgIGNzdC5EQVlfMl9TRUMKICAgIC8vICkgPT0gMCwgZXJyLklOVkFMSURfVElNRV9QRVJJT0QKICAgIGludGMgNiAvLyA4NjQwMAogICAgJQogICAgIQogICAgYXNzZXJ0IC8vIFRpbWUgcGVyaW9kcyBpbiBBY3R1YWwvQWN0dWFsIGRheSBjb3VudCBjb252ZW50aW9uIG11c3QgYmUgbXVsdGlwbGVzIG9mIGEgZGF5IChpbiBzZWNvbmRzKQogICAgYiBhc3NlcnRfdGltZV9ldmVudHNfc29ydGVkX2Zvcl9oZWFkZXJAMQoKYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZF9hZnRlcl9mb3JANjoKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5zZXRfc2Vjb25kYXJ5X3RpbWVfZXZlbnRzKHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHM6IGJ5dGVzKSAtPiBieXRlczoKc2V0X3NlY29uZGFyeV90aW1lX2V2ZW50czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU2MC01NjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9zZWNvbmRhcnlfdGltZV9ldmVudHMoCiAgICAvLyAgICAgc2VsZiwgc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50czogdHlwLlRpbWVFdmVudHMKICAgIC8vICkgLT4gdHlwLlNlY29uZGFyeU1hcmtldFNjaGVkdWxlOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTgxCiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMDUKICAgIC8vIHJldHVybiBzZWxmLnN0YXR1cyA9PSBjZmcuU1RBVFVTX0VOREVECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGMgNyAvLyAyMDAKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo1ODIKICAgIC8vIGFzc2VydCBub3Qgc2VsZi5zdGF0dXNfaXNfZW5kZWQoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgIQogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo1ODMKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2RlZmF1bHRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTg1CiAgICAvLyBhc3NlcnQgc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50cy5sZW5ndGggPj0gMSwgZXJyLklOVkFMSURfVElNRV9FVkVOVFNfTEVOR1RICiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBhc3NlcnQgLy8gVGltZSBldmVudHMgbGVuZ3RoIGlzIGludmFsaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU4NgogICAgLy8gaWYgc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50cy5sZW5ndGggPiAxOgogICAgaW50Y18xIC8vIDEKICAgID4KICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgYnogc2V0X3NlY29uZGFyeV90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU4NwogICAgLy8gc2VsZi5hc3NlcnRfdGltZV9ldmVudHNfc29ydGVkKHNlY29uZGFyeV9tYXJrZXRfdGltZV9ldmVudHMpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgYXNzZXJ0X3RpbWVfZXZlbnRzX3NvcnRlZAogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0xCiAgICBmcmFtZV9idXJ5IDEKCnNldF9zZWNvbmRhcnlfdGltZV9ldmVudHNfYWZ0ZXJfaWZfZWxzZUAyOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU4OQogICAgLy8gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiaXNzdWFuY2VfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5pc3N1YW5jZV9kYXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTkwLTU5MgogICAgLy8gPD0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1sKICAgIC8vICAgICBjZmcuU0VDT05EQVJZX01BUktFVF9PUEVOSU5HX0RBVEVfSURYCiAgICAvLyBdLm5hdGl2ZQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIGV4dHJhY3QgMCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTg5LTU5MgogICAgLy8gc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyA8PSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzWwogICAgLy8gICAgIGNmZy5TRUNPTkRBUllfTUFSS0VUX09QRU5JTkdfREFURV9JRFgKICAgIC8vIF0ubmF0aXZlCiAgICBzd2FwCiAgICBkaWcgMQogICAgPD0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU4OC01OTMKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5pc3N1YW5jZV9kYXRlCiAgICAvLyAgICAgPD0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1sKICAgIC8vICAgICAgICAgY2ZnLlNFQ09OREFSWV9NQVJLRVRfT1BFTklOR19EQVRFX0lEWAogICAgLy8gICAgIF0ubmF0aXZlCiAgICAvLyApLCBlcnIuSU5WQUxJRF9TRUNPTkRBUllfT1BFTklOR19EQVRFCiAgICBhc3NlcnQgLy8gSW52YWxpZCBzZWNvbmRhcnkgbWFya2V0IG9wZW5pbmcgZGF0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTk0CiAgICAvLyBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlID0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1sKICAgIGJ5dGVjIDE0IC8vICJzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU5NC01OTYKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgPSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzWwogICAgLy8gICAgIGNmZy5TRUNPTkRBUllfTUFSS0VUX09QRU5JTkdfREFURV9JRFgKICAgIC8vIF0ubmF0aXZlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTk3CiAgICAvLyBpZiBzZWxmLm1hdHVyaXR5X2RhdGU6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXR1cml0eV9kYXRlIGV4aXN0cwogICAgYnogc2V0X3NlY29uZGFyeV90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU5OQogICAgLy8gc2VsZi5tYXR1cml0eV9kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tYXR1cml0eV9kYXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjAxCiAgICAvLyBjZmcuU0VDT05EQVJZX01BUktFVF9DTE9TVVJFX0RBVEVfSURYCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjAwLTYwMgogICAgLy8gPj0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1sKICAgIC8vICAgICBjZmcuU0VDT05EQVJZX01BUktFVF9DTE9TVVJFX0RBVEVfSURYCiAgICAvLyBdLm5hdGl2ZQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgc3dhcAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NTk5LTYwMgogICAgLy8gc2VsZi5tYXR1cml0eV9kYXRlCiAgICAvLyA+PSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzWwogICAgLy8gICAgIGNmZy5TRUNPTkRBUllfTUFSS0VUX0NMT1NVUkVfREFURV9JRFgKICAgIC8vIF0ubmF0aXZlCiAgICBzd2FwCiAgICBkaWcgMQogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjU5OC02MDMKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5tYXR1cml0eV9kYXRlCiAgICAvLyAgICAgPj0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1sKICAgIC8vICAgICAgICAgY2ZnLlNFQ09OREFSWV9NQVJLRVRfQ0xPU1VSRV9EQVRFX0lEWAogICAgLy8gICAgIF0ubmF0aXZlCiAgICAvLyApLCBlcnIuSU5WQUxJRF9TRUNPTkRBUllfQ0xPU1VSRV9EQVRFCiAgICBhc3NlcnQgLy8gSW52YWxpZCBzZWNvbmRhcnkgbWFya2V0IGNsb3N1cmUgZGF0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjA0CiAgICAvLyBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlID0gc2Vjb25kYXJ5X21hcmtldF90aW1lX2V2ZW50c1sKICAgIGJ5dGVjIDE1IC8vICJzZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjYwNC02MDYKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgPSBzZWNvbmRhcnlfbWFya2V0X3RpbWVfZXZlbnRzWwogICAgLy8gICAgIGNmZy5TRUNPTkRBUllfTUFSS0VUX0NMT1NVUkVfREFURV9JRFgKICAgIC8vIF0ubmF0aXZlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAoKc2V0X3NlY29uZGFyeV90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2MDkKICAgIC8vIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNCAvLyAic2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2MDgtNjEwCiAgICAvLyBzZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZT1hcmM0LlVJbnQ2NCgKICAgIC8vICAgICBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlCiAgICAvLyApLAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjEyCiAgICAvLyBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTUgLy8gInNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjExLTYxMwogICAgLy8gc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGU9YXJjNC5VSW50NjQoCiAgICAvLyAgICAgc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZQogICAgLy8gKSwKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjYwNy02MTQKICAgIC8vIHJldHVybiB0eXAuU2Vjb25kYXJ5TWFya2V0U2NoZWR1bGUoCiAgICAvLyAgICAgc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGU9YXJjNC5VSW50NjQoCiAgICAvLyAgICAgICAgIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9vcGVuaW5nX2RhdGUKICAgIC8vICAgICApLAogICAgLy8gICAgIHNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlPWFyYzQuVUludDY0KAogICAgLy8gICAgICAgICBzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlCiAgICAvLyAgICAgKSwKICAgIC8vICkKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5hc3NpZ25fcm9sZShyb2xlX2FkZHJlc3M6IGJ5dGVzLCByb2xlOiBieXRlcywgY29uZmlnOiBieXRlcykgLT4gYnl0ZXM6CmFzc2lnbl9yb2xlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjE2LTYxOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgYXNzaWduX3JvbGUoCiAgICAvLyAgICAgc2VsZiwgcm9sZV9hZGRyZXNzOiBhcmM0LkFkZHJlc3MsIHJvbGU6IGFyYzQuVUludDgsIGNvbmZpZzogYXJjNC5EeW5hbWljQnl0ZXMKICAgIC8vICkgLT4gYXJjNC5VSW50NjQ6CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjYzNwogICAgLy8gc2VsZi5hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjM4CiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjYzOQogICAgLy8gYXNzZXJ0IHJvbGUubmF0aXZlIGluICgKICAgIGZyYW1lX2RpZyAtMgogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NDAKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICBwdXNoaW50IDIwIC8vIDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2MzktNjQ2CiAgICAvLyBhc3NlcnQgcm9sZS5uYXRpdmUgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IGFzc2lnbl9yb2xlX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjQxCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIHB1c2hpbnQgNDAgLy8gNDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjYzOS02NDYKICAgIC8vIGFzc2VydCByb2xlLm5hdGl2ZSBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogYXNzaWduX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NDIKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICBwdXNoaW50IDUwIC8vIDUwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2MzktNjQ2CiAgICAvLyBhc3NlcnQgcm9sZS5uYXRpdmUgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IGFzc2lnbl9yb2xlX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjQzCiAgICAvLyBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICBwdXNoaW50IDYwIC8vIDYwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2MzktNjQ2CiAgICAvLyBhc3NlcnQgcm9sZS5uYXRpdmUgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BUlJBTkdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICA9PQogICAgYm56IGFzc2lnbl9yb2xlX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjQ0CiAgICAvLyBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIHB1c2hpbnQgNzAgLy8gNzAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjYzOS02NDYKICAgIC8vIGFzc2VydCByb2xlLm5hdGl2ZSBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogYXNzaWduX3JvbGVfYm9vbF90cnVlQDYKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NDUKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgcHVzaGludCA4MCAvLyA4MAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjM5LTY0NgogICAgLy8gYXNzZXJ0IHJvbGUubmF0aXZlIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJ6IGFzc2lnbl9yb2xlX2Jvb2xfZmFsc2VANwoKYXNzaWduX3JvbGVfYm9vbF90cnVlQDY6CiAgICBpbnRjXzEgLy8gMQoKYXNzaWduX3JvbGVfYm9vbF9tZXJnZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjM5LTY0NgogICAgLy8gYXNzZXJ0IHJvbGUubmF0aXZlIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVJSQU5HRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgYXNzZXJ0IC8vIEludmFsaWQgcm9sZSBpZGVudGlmaWVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NDgKICAgIC8vIGNhc2UgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIHB1c2hpbnRzIDIwIDQwIDUwIDYwIDcwIDgwIC8vIDIwLCA0MCwgNTAsIDYwLCA3MCwgODAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY0Ny02NzYKICAgIC8vIG1hdGNoIHJvbGUubmF0aXZlOgogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FSUkFOR0VSKToKICAgIC8vICAgICAgICAgc2VsZi5hcnJhbmdlci52YWx1ZSA9IHJvbGVfYWRkcmVzcy5uYXRpdmUKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgKAogICAgLy8gICAgICAgICAgICAgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmFjY291bnRfbWFuYWdlcgogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoCiAgICAvLyAgICAgICAgICAgICBjb25maWcubmF0aXZlCiAgICAvLyAgICAgICAgICkKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUik6CiAgICAvLyAgICAgICAgIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgLy8gICAgICAgICBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKAogICAgLy8gICAgICAgICAgICAgY29uZmlnLm5hdGl2ZQogICAgLy8gICAgICAgICApCiAgICAvLyAgICAgY2FzZSBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSk6CiAgICAvLyAgICAgICAgIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYudHJ1c3RlZSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIHNlbGYudHJ1c3RlZVtyb2xlX2FkZHJlc3NdID0gdHlwLlJvbGVDb25maWcuZnJvbV9ieXRlcyhjb25maWcubmF0aXZlKQogICAgLy8gICAgIGNhc2UgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSk6CiAgICAvLyAgICAgICAgIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnLm5hdGl2ZSkKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpOgogICAgLy8gICAgICAgICBhc3NlcnQgKAogICAgLy8gICAgICAgICAgICAgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmludGVyZXN0X29yYWNsZQogICAgLy8gICAgICAgICApLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgc2VsZi5pbnRlcmVzdF9vcmFjbGVbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoCiAgICAvLyAgICAgICAgICAgICBjb25maWcubmF0aXZlCiAgICAvLyAgICAgICAgICkKICAgIC8vICAgICBjYXNlIF86CiAgICAvLyAgICAgICAgIG9wLmVycigpCiAgICBmcmFtZV9kaWcgMAogICAgbWF0Y2ggYXNzaWduX3JvbGVfc3dpdGNoX2Nhc2VfMEA5IGFzc2lnbl9yb2xlX3N3aXRjaF9jYXNlXzFAMTAgYXNzaWduX3JvbGVfc3dpdGNoX2Nhc2VfMkAxMSBhc3NpZ25fcm9sZV9zd2l0Y2hfY2FzZV8zQDEyIGFzc2lnbl9yb2xlX3N3aXRjaF9jYXNlXzRAMTMgYXNzaWduX3JvbGVfc3dpdGNoX2Nhc2VfNUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Njc2CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphc3NpZ25fcm9sZV9zd2l0Y2hfY2FzZV81QDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjcwCiAgICAvLyByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuaW50ZXJlc3Rfb3JhY2xlCiAgICBieXRlYyAzMCAvLyAweDUyMzgzMDIzCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY2OS02NzEKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmludGVyZXN0X29yYWNsZQogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjczCiAgICAvLyBjb25maWcubmF0aXZlCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NzItNjc0CiAgICAvLyBzZWxmLmludGVyZXN0X29yYWNsZVtyb2xlX2FkZHJlc3NdID0gdHlwLlJvbGVDb25maWcuZnJvbV9ieXRlcygKICAgIC8vICAgICBjb25maWcubmF0aXZlCiAgICAvLyApCiAgICBib3hfcHV0Cgphc3NpZ25fcm9sZV9zd2l0Y2hfY2FzZV9uZXh0QDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Njc3CiAgICAvLyByZXR1cm4gYXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXApCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpdG9iCiAgICBzd2FwCiAgICByZXRzdWIKCmFzc2lnbl9yb2xlX3N3aXRjaF9jYXNlXzRAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NjYKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDI0IC8vIDB4NTIzNzMwMjMKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY2NwogICAgLy8gc2VsZi5hdXRob3JpdHlbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoY29uZmlnLm5hdGl2ZSkKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGJveF9wdXQKICAgIGIgYXNzaWduX3JvbGVfc3dpdGNoX2Nhc2VfbmV4dEAxNgoKYXNzaWduX3JvbGVfc3dpdGNoX2Nhc2VfM0AxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY2MwogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi50cnVzdGVlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDI1IC8vIDB4NTIzNjMwMjMKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY2NAogICAgLy8gc2VsZi50cnVzdGVlW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKGNvbmZpZy5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBib3hfcHV0CiAgICBiIGFzc2lnbl9yb2xlX3N3aXRjaF9jYXNlX25leHRAMTYKCmFzc2lnbl9yb2xlX3N3aXRjaF9jYXNlXzJAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NTgKICAgIC8vIGFzc2VydCByb2xlX2FkZHJlc3Mgbm90IGluIHNlbGYucHJpbWFyeV9kZWFsZXIsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYnl0ZWMgMjYgLy8gMHg1MjM1MzAyMwogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IHJvbGUgYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjYwCiAgICAvLyBjb25maWcubmF0aXZlCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NTktNjYxCiAgICAvLyBzZWxmLnByaW1hcnlfZGVhbGVyW3JvbGVfYWRkcmVzc10gPSB0eXAuUm9sZUNvbmZpZy5mcm9tX2J5dGVzKAogICAgLy8gICAgIGNvbmZpZy5uYXRpdmUKICAgIC8vICkKICAgIGJveF9wdXQKICAgIGIgYXNzaWduX3JvbGVfc3dpdGNoX2Nhc2VfbmV4dEAxNgoKYXNzaWduX3JvbGVfc3dpdGNoX2Nhc2VfMUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY1MgogICAgLy8gcm9sZV9hZGRyZXNzIG5vdCBpbiBzZWxmLmFjY291bnRfbWFuYWdlcgogICAgYnl0ZWMgMjcgLy8gMHg1MjM0MzAyMwogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NTEtNjUzCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHJvbGVfYWRkcmVzcyBub3QgaW4gc2VsZi5hY2NvdW50X21hbmFnZXIKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY1NQogICAgLy8gY29uZmlnLm5hdGl2ZQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NjU0LTY1NgogICAgLy8gc2VsZi5hY2NvdW50X21hbmFnZXJbcm9sZV9hZGRyZXNzXSA9IHR5cC5Sb2xlQ29uZmlnLmZyb21fYnl0ZXMoCiAgICAvLyAgICAgY29uZmlnLm5hdGl2ZQogICAgLy8gKQogICAgYm94X3B1dAogICAgYiBhc3NpZ25fcm9sZV9zd2l0Y2hfY2FzZV9uZXh0QDE2Cgphc3NpZ25fcm9sZV9zd2l0Y2hfY2FzZV8wQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NDkKICAgIC8vIHNlbGYuYXJyYW5nZXIudmFsdWUgPSByb2xlX2FkZHJlc3MubmF0aXZlCiAgICBieXRlYyAxNyAvLyAweDUyMzIzMDIzCiAgICBmcmFtZV9kaWcgLTMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGFzc2lnbl9yb2xlX3N3aXRjaF9jYXNlX25leHRAMTYKCmFzc2lnbl9yb2xlX2Jvb2xfZmFsc2VANzoKICAgIGludGNfMCAvLyAwCiAgICBiIGFzc2lnbl9yb2xlX2Jvb2xfbWVyZ2VAOAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5iYXNlX2RfYXNhLmNvbnRyYWN0LkJhc2VEQXNhLnJldm9rZV9yb2xlKHJvbGVfYWRkcmVzczogYnl0ZXMsIHJvbGU6IGJ5dGVzKSAtPiBieXRlczoKcmV2b2tlX3JvbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2NzktNjgwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiByZXZva2Vfcm9sZShzZWxmLCByb2xlX2FkZHJlc3M6IGFyYzQuQWRkcmVzcywgcm9sZTogYXJjNC5VSW50OCkgLT4gYXJjNC5VSW50NjQ6CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY5NwogICAgLy8gc2VsZi5hc3NlcnRfY2FsbGVyX2lzX2FycmFuZ2VyKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Njk4CiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY5OQogICAgLy8gYXNzZXJ0IHJvbGUubmF0aXZlIGluICgKICAgIGZyYW1lX2RpZyAtMQogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3MDAKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgcHVzaGludCA0MCAvLyA0MAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Njk5LTcwNQogICAgLy8gYXNzZXJ0IHJvbGUubmF0aXZlIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogcmV2b2tlX3JvbGVfYm9vbF90cnVlQDUKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3MDEKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICBwdXNoaW50IDUwIC8vIDUwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo2OTktNzA1CiAgICAvLyBhc3NlcnQgcm9sZS5uYXRpdmUgaW4gKAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgLy8gKSwgZXJyLklOVkFMSURfUk9MRQogICAgPT0KICAgIGJueiByZXZva2Vfcm9sZV9ib29sX3RydWVANQogICAgZnJhbWVfZGlnIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcwMgogICAgLy8gVUludDY0KGNzdC5ST0xFX1RSVVNURUUpLAogICAgcHVzaGludCA2MCAvLyA2MAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Njk5LTcwNQogICAgLy8gYXNzZXJ0IHJvbGUubmF0aXZlIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogcmV2b2tlX3JvbGVfYm9vbF90cnVlQDUKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3MDMKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpLAogICAgcHVzaGludCA3MCAvLyA3MAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Njk5LTcwNQogICAgLy8gYXNzZXJ0IHJvbGUubmF0aXZlIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBibnogcmV2b2tlX3JvbGVfYm9vbF90cnVlQDUKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3MDQKICAgIC8vIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpLAogICAgcHVzaGludCA4MCAvLyA4MAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Njk5LTcwNQogICAgLy8gYXNzZXJ0IHJvbGUubmF0aXZlIGluICgKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQUNDT1VOVF9NQU5BR0VSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfUFJJTUFSWV9ERUFMRVIpLAogICAgLy8gICAgIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfQVVUSE9SSVRZKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfSU5URVJFU1RfT1JBQ0xFKSwKICAgIC8vICksIGVyci5JTlZBTElEX1JPTEUKICAgID09CiAgICBieiByZXZva2Vfcm9sZV9ib29sX2ZhbHNlQDYKCnJldm9rZV9yb2xlX2Jvb2xfdHJ1ZUA1OgogICAgaW50Y18xIC8vIDEKCnJldm9rZV9yb2xlX2Jvb2xfbWVyZ2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjY5OS03MDUKICAgIC8vIGFzc2VydCByb2xlLm5hdGl2ZSBpbiAoCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUiksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX1BSSU1BUllfREVBTEVSKSwKICAgIC8vICAgICBVSW50NjQoY3N0LlJPTEVfVFJVU1RFRSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0FVVEhPUklUWSksCiAgICAvLyAgICAgVUludDY0KGNzdC5ST0xFX0lOVEVSRVNUX09SQUNMRSksCiAgICAvLyApLCBlcnIuSU5WQUxJRF9ST0xFCiAgICBhc3NlcnQgLy8gSW52YWxpZCByb2xlIGlkZW50aWZpZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcwNy03MDgKICAgIC8vICMgQXJyYW5nZXIgcm9sZSBjYW4gbm90IGJlIHJldm9rZWQgKGp1c3Qgcm90YXRlZCkKICAgIC8vIGNhc2UgVUludDY0KGNzdC5ST0xFX0FDQ09VTlRfTUFOQUdFUik6CiAgICBwdXNoaW50cyA0MCA1MCA2MCA3MCA4MCAvLyA0MCwgNTAsIDYwLCA3MCwgODAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcwNi03MjQKICAgIC8vIG1hdGNoIHJvbGUubmF0aXZlOgogICAgLy8gICAgICMgQXJyYW5nZXIgcm9sZSBjYW4gbm90IGJlIHJldm9rZWQgKGp1c3Qgcm90YXRlZCkKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9BQ0NPVU5UX01BTkFHRVIpOgogICAgLy8gICAgICAgICBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgb3AuQm94LmRlbGV0ZShjc3QuUFJFRklYX0lEX0FDQ09VTlRfTUFOQUdFUiArIHJvbGVfYWRkcmVzcy5ieXRlcykKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9QUklNQVJZX0RFQUxFUik6CiAgICAvLyAgICAgICAgIGFzc2VydCByb2xlX2FkZHJlc3MgaW4gc2VsZi5wcmltYXJ5X2RlYWxlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICAvLyAgICAgICAgIG9wLkJveC5kZWxldGUoY3N0LlBSRUZJWF9JRF9QUklNQVJZX0RFQUxFUiArIHJvbGVfYWRkcmVzcy5ieXRlcykKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9UUlVTVEVFKToKICAgIC8vICAgICAgICAgYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLnRydXN0ZWUsIGVyci5JTlZBTElEX1JPTEVfQUREUkVTUwogICAgLy8gICAgICAgICBvcC5Cb3guZGVsZXRlKGNzdC5QUkVGSVhfSURfVFJVU1RFRSArIHJvbGVfYWRkcmVzcy5ieXRlcykKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9BVVRIT1JJVFkpOgogICAgLy8gICAgICAgICBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgb3AuQm94LmRlbGV0ZShjc3QuUFJFRklYX0lEX0FVVEhPUklUWSArIHJvbGVfYWRkcmVzcy5ieXRlcykKICAgIC8vICAgICBjYXNlIFVJbnQ2NChjc3QuUk9MRV9JTlRFUkVTVF9PUkFDTEUpOgogICAgLy8gICAgICAgICBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIC8vICAgICAgICAgb3AuQm94LmRlbGV0ZShjc3QuUFJFRklYX0lEX0lOVEVSRVNUX09SQUNMRSArIHJvbGVfYWRkcmVzcy5ieXRlcykKICAgIC8vICAgICBjYXNlIF86CiAgICAvLyAgICAgICAgIG9wLmVycigpCiAgICBmcmFtZV9kaWcgMAogICAgbWF0Y2ggcmV2b2tlX3JvbGVfc3dpdGNoX2Nhc2VfMEA4IHJldm9rZV9yb2xlX3N3aXRjaF9jYXNlXzFAOSByZXZva2Vfcm9sZV9zd2l0Y2hfY2FzZV8yQDEwIHJldm9rZV9yb2xlX3N3aXRjaF9jYXNlXzNAMTEgcmV2b2tlX3JvbGVfc3dpdGNoX2Nhc2VfNEAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzI0CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZXZva2Vfcm9sZV9zd2l0Y2hfY2FzZV80QDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzIxCiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuaW50ZXJlc3Rfb3JhY2xlLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDMwIC8vIDB4NTIzODMwMjMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcyMgogICAgLy8gb3AuQm94LmRlbGV0ZShjc3QuUFJFRklYX0lEX0lOVEVSRVNUX09SQUNMRSArIHJvbGVfYWRkcmVzcy5ieXRlcykKICAgIGJveF9kZWwKICAgIHBvcAoKcmV2b2tlX3JvbGVfc3dpdGNoX2Nhc2VfbmV4dEAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcyNQogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKQogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgc3dhcAogICAgcmV0c3ViCgpyZXZva2Vfcm9sZV9zd2l0Y2hfY2FzZV8zQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzE4CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYuYXV0aG9yaXR5LCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDI0IC8vIDB4NTIzNzMwMjMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcxOQogICAgLy8gb3AuQm94LmRlbGV0ZShjc3QuUFJFRklYX0lEX0FVVEhPUklUWSArIHJvbGVfYWRkcmVzcy5ieXRlcykKICAgIGJveF9kZWwKICAgIHBvcAogICAgYiByZXZva2Vfcm9sZV9zd2l0Y2hfY2FzZV9uZXh0QDE0CgpyZXZva2Vfcm9sZV9zd2l0Y2hfY2FzZV8yQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzE1CiAgICAvLyBhc3NlcnQgcm9sZV9hZGRyZXNzIGluIHNlbGYudHJ1c3RlZSwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyAyNSAvLyAweDUyMzYzMDIzCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3MTYKICAgIC8vIG9wLkJveC5kZWxldGUoY3N0LlBSRUZJWF9JRF9UUlVTVEVFICsgcm9sZV9hZGRyZXNzLmJ5dGVzKQogICAgYm94X2RlbAogICAgcG9wCiAgICBiIHJldm9rZV9yb2xlX3N3aXRjaF9jYXNlX25leHRAMTQKCnJldm9rZV9yb2xlX3N3aXRjaF9jYXNlXzFAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcxMgogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLnByaW1hcnlfZGVhbGVyLCBlcnIuSU5WQUxJRF9ST0xFX0FERFJFU1MKICAgIGJ5dGVjIDI2IC8vIDB4NTIzNTMwMjMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCByb2xlIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcxMwogICAgLy8gb3AuQm94LmRlbGV0ZShjc3QuUFJFRklYX0lEX1BSSU1BUllfREVBTEVSICsgcm9sZV9hZGRyZXNzLmJ5dGVzKQogICAgYm94X2RlbAogICAgcG9wCiAgICBiIHJldm9rZV9yb2xlX3N3aXRjaF9jYXNlX25leHRAMTQKCnJldm9rZV9yb2xlX3N3aXRjaF9jYXNlXzBAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjcwOQogICAgLy8gYXNzZXJ0IHJvbGVfYWRkcmVzcyBpbiBzZWxmLmFjY291bnRfbWFuYWdlciwgZXJyLklOVkFMSURfUk9MRV9BRERSRVNTCiAgICBieXRlYyAyNyAvLyAweDUyMzQzMDIzCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgcm9sZSBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3MTAKICAgIC8vIG9wLkJveC5kZWxldGUoY3N0LlBSRUZJWF9JRF9BQ0NPVU5UX01BTkFHRVIgKyByb2xlX2FkZHJlc3MuYnl0ZXMpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGIgcmV2b2tlX3JvbGVfc3dpdGNoX2Nhc2VfbmV4dEAxNAoKcmV2b2tlX3JvbGVfYm9vbF9mYWxzZUA2OgogICAgaW50Y18wIC8vIDAKICAgIGIgcmV2b2tlX3JvbGVfYm9vbF9tZXJnZUA3CgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2Eub3Blbl9hY2NvdW50KGhvbGRpbmdfYWRkcmVzczogYnl0ZXMsIHBheW1lbnRfYWRkcmVzczogYnl0ZXMpIC0+IGJ5dGVzOgpvcGVuX2FjY291bnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3MjctNzMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBvcGVuX2FjY291bnQoCiAgICAvLyAgICAgc2VsZiwgaG9sZGluZ19hZGRyZXNzOiBhcmM0LkFkZHJlc3MsIHBheW1lbnRfYWRkcmVzczogYXJjNC5BZGRyZXNzCiAgICAvLyApIC0+IGFyYzQuVUludDY0OgogICAgcHJvdG8gMiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3NDcKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hY2NvdW50X21hbmFnZXIoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2FjY291bnRfbWFuYWdlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTA1CiAgICAvLyByZXR1cm4gc2VsZi5zdGF0dXMgPT0gY2ZnLlNUQVRVU19FTkRFRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInN0YXR1cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBpbnRjIDcgLy8gMjAwCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzQ4CiAgICAvLyBhc3NlcnQgbm90IHNlbGYuc3RhdHVzX2lzX2VuZGVkKCksIGVyci5VTkFVVEhPUklaRUQKICAgICEKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzQ5CiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3RfZGVmYXVsdGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc1MAogICAgLy8gc2VsZi5hc3NlcnRfaXNfbm90X3N1c3BlbmRlZCgpCiAgICBjYWxsc3ViIGFzc2VydF9pc19ub3Rfc3VzcGVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3NTEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3Mgbm90IGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlY18yIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc1My03NTkKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdID0gdHlwLkFjY291bnRJbmZvKAogICAgLy8gICAgIHBheW1lbnRfYWRkcmVzcz1wYXltZW50X2FkZHJlc3MsCiAgICAvLyAgICAgdW5pdHM9YXJjNC5VSW50NjQoKSwKICAgIC8vICAgICB1bml0X3ZhbHVlPWFyYzQuVUludDY0KCksCiAgICAvLyAgICAgcGFpZF9jb3Vwb25zPWFyYzQuVUludDY0KCksCiAgICAvLyAgICAgc3VzcGVuZGVkPWFyYzQuQm9vbCgpLAogICAgLy8gKQogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3NTUKICAgIC8vIHVuaXRzPWFyYzQuVUludDY0KCksCiAgICBieXRlYyA3IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzUzLTc1OQogICAgLy8gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10gPSB0eXAuQWNjb3VudEluZm8oCiAgICAvLyAgICAgcGF5bWVudF9hZGRyZXNzPXBheW1lbnRfYWRkcmVzcywKICAgIC8vICAgICB1bml0cz1hcmM0LlVJbnQ2NCgpLAogICAgLy8gICAgIHVuaXRfdmFsdWU9YXJjNC5VSW50NjQoKSwKICAgIC8vICAgICBwYWlkX2NvdXBvbnM9YXJjNC5VSW50NjQoKSwKICAgIC8vICAgICBzdXNwZW5kZWQ9YXJjNC5Cb29sKCksCiAgICAvLyApCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc1NgogICAgLy8gdW5pdF92YWx1ZT1hcmM0LlVJbnQ2NCgpLAogICAgYnl0ZWMgNyAvLyAweDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc1My03NTkKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdID0gdHlwLkFjY291bnRJbmZvKAogICAgLy8gICAgIHBheW1lbnRfYWRkcmVzcz1wYXltZW50X2FkZHJlc3MsCiAgICAvLyAgICAgdW5pdHM9YXJjNC5VSW50NjQoKSwKICAgIC8vICAgICB1bml0X3ZhbHVlPWFyYzQuVUludDY0KCksCiAgICAvLyAgICAgcGFpZF9jb3Vwb25zPWFyYzQuVUludDY0KCksCiAgICAvLyAgICAgc3VzcGVuZGVkPWFyYzQuQm9vbCgpLAogICAgLy8gKQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3NTcKICAgIC8vIHBhaWRfY291cG9ucz1hcmM0LlVJbnQ2NCgpLAogICAgYnl0ZWMgNyAvLyAweDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc1My03NTkKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdID0gdHlwLkFjY291bnRJbmZvKAogICAgLy8gICAgIHBheW1lbnRfYWRkcmVzcz1wYXltZW50X2FkZHJlc3MsCiAgICAvLyAgICAgdW5pdHM9YXJjNC5VSW50NjQoKSwKICAgIC8vICAgICB1bml0X3ZhbHVlPWFyYzQuVUludDY0KCksCiAgICAvLyAgICAgcGFpZF9jb3Vwb25zPWFyYzQuVUludDY0KCksCiAgICAvLyAgICAgc3VzcGVuZGVkPWFyYzQuQm9vbCgpLAogICAgLy8gKQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3NTgKICAgIC8vIHN1c3BlbmRlZD1hcmM0LkJvb2woKSwKICAgIGJ5dGVjIDE2IC8vIDB4MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc1My03NTkKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdID0gdHlwLkFjY291bnRJbmZvKAogICAgLy8gICAgIHBheW1lbnRfYWRkcmVzcz1wYXltZW50X2FkZHJlc3MsCiAgICAvLyAgICAgdW5pdHM9YXJjNC5VSW50NjQoKSwKICAgIC8vICAgICB1bml0X3ZhbHVlPWFyYzQuVUludDY0KCksCiAgICAvLyAgICAgcGFpZF9jb3Vwb25zPWFyYzQuVUludDY0KCksCiAgICAvLyAgICAgc3VzcGVuZGVkPWFyYzQuQm9vbCgpLAogICAgLy8gKQogICAgY29uY2F0CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3NjAKICAgIC8vIHJldHVybiBhcmM0LlVJbnQ2NChHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCkKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGl0b2IKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5iYXNlX2RfYXNhLmNvbnRyYWN0LkJhc2VEQXNhLmFzc2VydF9jYWxsZXJfaXNfYWNjb3VudF9tYW5hZ2VyKCkgLT4gdm9pZDoKYXNzZXJ0X2NhbGxlcl9pc19hY2NvdW50X21hbmFnZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMTktMTIwCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGFzc2VydF9jYWxsZXJfaXNfYWNjb3VudF9tYW5hZ2VyKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMjMKICAgIC8vIGNhbGxlciBpbiBzZWxmLmFjY291bnRfbWFuYWdlcgogICAgYnl0ZWMgMjcgLy8gMHg1MjM0MzAyMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTIxCiAgICAvLyBjYWxsZXIgPSBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjEyMwogICAgLy8gY2FsbGVyIGluIHNlbGYuYWNjb3VudF9tYW5hZ2VyCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMjMtMTI2CiAgICAvLyBjYWxsZXIgaW4gc2VsZi5hY2NvdW50X21hbmFnZXIKICAgIC8vIGFuZCBzZWxmLmFjY291bnRfbWFuYWdlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSBzZWxmLmFjY291bnRfbWFuYWdlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBieiBhc3NlcnRfY2FsbGVyX2lzX2FjY291bnRfbWFuYWdlcl9ib29sX2ZhbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjEyNAogICAgLy8gYW5kIHNlbGYuYWNjb3VudF9tYW5hZ2VyW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfbWFuYWdlciBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTI1CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTI0LTEyNQogICAgLy8gYW5kIHNlbGYuYWNjb3VudF9tYW5hZ2VyW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGl0b2IKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBiPD0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjEyNC0xMjYKICAgIC8vIGFuZCBzZWxmLmFjY291bnRfbWFuYWdlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSBzZWxmLmFjY291bnRfbWFuYWdlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBieiBhc3NlcnRfY2FsbGVyX2lzX2FjY291bnRfbWFuYWdlcl9ib29sX2ZhbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjEyNgogICAgLy8gPD0gc2VsZi5hY2NvdW50X21hbmFnZXJbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnRfbWFuYWdlciBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgOCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTI1LTEyNgogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHNlbGYuYWNjb3VudF9tYW5hZ2VyW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9lbmQKICAgIGZyYW1lX2RpZyAwCiAgICBiPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjEyNC0xMjYKICAgIC8vIGFuZCBzZWxmLmFjY291bnRfbWFuYWdlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSBzZWxmLmFjY291bnRfbWFuYWdlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBieiBhc3NlcnRfY2FsbGVyX2lzX2FjY291bnRfbWFuYWdlcl9ib29sX2ZhbHNlQDQKICAgIGludGNfMSAvLyAxCgphc3NlcnRfY2FsbGVyX2lzX2FjY291bnRfbWFuYWdlcl9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMjItMTI3CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIGNhbGxlciBpbiBzZWxmLmFjY291bnRfbWFuYWdlcgogICAgLy8gICAgIGFuZCBzZWxmLmFjY291bnRfbWFuYWdlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vICAgICA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gICAgIDw9IHNlbGYuYWNjb3VudF9tYW5hZ2VyW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9lbmQKICAgIC8vICksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgcmV0c3ViCgphc3NlcnRfY2FsbGVyX2lzX2FjY291bnRfbWFuYWdlcl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiBhc3NlcnRfY2FsbGVyX2lzX2FjY291bnRfbWFuYWdlcl9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5jbG9zZV9hY2NvdW50KGhvbGRpbmdfYWRkcmVzczogYnl0ZXMpIC0+IGJ5dGVzOgpjbG9zZV9hY2NvdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6NzYyLTc2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgY2xvc2VfYWNjb3VudCgKICAgIC8vICAgICBzZWxmLCBob2xkaW5nX2FkZHJlc3M6IGFyYzQuQWRkcmVzcwogICAgLy8gKSAtPiBhcmM0LlR1cGxlW2FyYzQuVUludDY0LCBhcmM0LlVJbnQ2NF06CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc4MAogICAgLy8gc2VsZi5hc3NlcnRfY2FsbGVyX2lzX2FjY291bnRfbWFuYWdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYWNjb3VudF9tYW5hZ2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3ODEKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2RlZmF1bHRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTcxCiAgICAvLyBhc3NlcnQgaG9sZGluZ19hZGRyZXNzIGluIHNlbGYuYWNjb3VudCwgZXJyLklOVkFMSURfSE9MRElOR19BRERSRVNTCiAgICBieXRlY18yIC8vIDB4NTIzMzMwMjMKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEludmFsaWQgYWNjb3VudCBob2xkaW5nIGFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojc4NAogICAgLy8gY2xvc2VkX3VuaXRzID0gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10udW5pdHMubmF0aXZlCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDMyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3ODUKICAgIC8vIG9wLkJveC5kZWxldGUoY3N0LlBSRUZJWF9JRF9BQ0NPVU5UICsgaG9sZGluZ19hZGRyZXNzLmJ5dGVzKQogICAgc3dhcAogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3ODYKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgLT0gY2xvc2VkX3VuaXRzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBkaWcgMQogICAgLQogICAgYnl0ZWNfMSAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Nzg3CiAgICAvLyBzZWxmLmVuZF9pZl9ub19jaXJjdWxhdGluZ191bml0cygpCiAgICBjYWxsc3ViIGVuZF9pZl9ub19jaXJjdWxhdGluZ191bml0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Nzg5CiAgICAvLyAoYXJjNC5VSW50NjQoY2xvc2VkX3VuaXRzKSwgYXJjNC5VSW50NjQoR2xvYmFsLmxhdGVzdF90aW1lc3RhbXApKQogICAgaXRvYgogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Nzg4LTc5MAogICAgLy8gcmV0dXJuIGFyYzQuVHVwbGUoCiAgICAvLyAgICAgKGFyYzQuVUludDY0KGNsb3NlZF91bml0cyksIGFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKSkKICAgIC8vICkKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2EucHJpbWFyeV9kaXN0cmlidXRpb24oaG9sZGluZ19hZGRyZXNzOiBieXRlcywgdW5pdHM6IGJ5dGVzKSAtPiBieXRlczoKcHJpbWFyeV9kaXN0cmlidXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo3OTItNzk1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBwcmltYXJ5X2Rpc3RyaWJ1dGlvbigKICAgIC8vICAgICBzZWxmLCBob2xkaW5nX2FkZHJlc3M6IGFyYzQuQWRkcmVzcywgdW5pdHM6IGFyYzQuVUludDY0CiAgICAvLyApIC0+IGFyYzQuVUludDY0OgogICAgcHJvdG8gMiAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjEwMQogICAgLy8gcmV0dXJuIHNlbGYuc3RhdHVzID09IGNmZy5TVEFUVVNfQUNUSVZFCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMTAwIC8vIDEwMAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI4NC0yODcKICAgIC8vIHNlbGYuc3RhdHVzX2lzX2FjdGl2ZSgpCiAgICAvLyBhbmQgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlCiAgICBieiBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX2ZhbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI4NQogICAgLy8gYW5kIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyODUtMjg2CiAgICAvLyBhbmQgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Mjg1LTI4NwogICAgLy8gYW5kIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZQogICAgYnogcHJpbWFyeV9kaXN0cmlidXRpb25fYm9vbF9mYWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToyODcKICAgIC8vIDwgc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOSAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjI4Ni0yODcKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8IHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlCiAgICBmcmFtZV9kaWcgMgogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6Mjg1LTI4NwogICAgLy8gYW5kIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZQogICAgYnogcHJpbWFyeV9kaXN0cmlidXRpb25fYm9vbF9mYWxzZUA1CiAgICBpbnRjXzEgLy8gMQoKcHJpbWFyeV9kaXN0cmlidXRpb25fYm9vbF9tZXJnZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MjgzLTI4OAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLnN0YXR1c19pc19hY3RpdmUoKQogICAgLy8gICAgIGFuZCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPCBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZQogICAgLy8gKSwgZXJyLlBSSU1BUllfRElTVFJJQlVUSU9OX0NMT1NFRAogICAgYXNzZXJ0IC8vIFByaW1hcnkgZGlzdHJpYnV0aW9uIGlzIGNsb3NlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTMzCiAgICAvLyBjYWxsZXIgaW4gc2VsZi5wcmltYXJ5X2RlYWxlcgogICAgYnl0ZWMgMjYgLy8gMHg1MjM1MzAyMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTMxCiAgICAvLyBjYWxsZXIgPSBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjEzMwogICAgLy8gY2FsbGVyIGluIHNlbGYucHJpbWFyeV9kZWFsZXIKICAgIGNvbmNhdAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTMzLTEzNgogICAgLy8gY2FsbGVyIGluIHNlbGYucHJpbWFyeV9kZWFsZXIKICAgIC8vIGFuZCBzZWxmLnByaW1hcnlfZGVhbGVyW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHNlbGYucHJpbWFyeV9kZWFsZXJbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogcHJpbWFyeV9kaXN0cmlidXRpb25fYm9vbF9mYWxzZUAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTM0CiAgICAvLyBhbmQgc2VsZi5wcmltYXJ5X2RlYWxlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcmltYXJ5X2RlYWxlciBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCA4IC8vIG9uIGVycm9yOiBJbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTM1CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTM0LTEzNQogICAgLy8gYW5kIHNlbGYucHJpbWFyeV9kZWFsZXJbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgaXRvYgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGI8PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTM0LTEzNgogICAgLy8gYW5kIHNlbGYucHJpbWFyeV9kZWFsZXJbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gc2VsZi5wcmltYXJ5X2RlYWxlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBieiBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX2ZhbHNlQDEyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMzYKICAgIC8vIDw9IHNlbGYucHJpbWFyeV9kZWFsZXJbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByaW1hcnlfZGVhbGVyIGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCA4IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMzUtMTM2CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gc2VsZi5wcmltYXJ5X2RlYWxlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBmcmFtZV9kaWcgMQogICAgYj49CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxMzQtMTM2CiAgICAvLyBhbmQgc2VsZi5wcmltYXJ5X2RlYWxlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSBzZWxmLnByaW1hcnlfZGVhbGVyW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IHByaW1hcnlfZGlzdHJpYnV0aW9uX2Jvb2xfZmFsc2VAMTIKICAgIGludGNfMSAvLyAxCgpwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX21lcmdlQDEzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTMyLTEzNwogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBjYWxsZXIgaW4gc2VsZi5wcmltYXJ5X2RlYWxlcgogICAgLy8gICAgIGFuZCBzZWxmLnByaW1hcnlfZGVhbGVyW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPD0gc2VsZi5wcmltYXJ5X2RlYWxlcltjYWxsZXJdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICAvLyApLCBlcnIuVU5BVVRIT1JJWkVECiAgICBhc3NlcnQgLy8gTm90IGF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE3MQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWNfMiAvLyAweDUyMzMzMDIzCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4MjAKICAgIC8vIHNlbGYuYXNzZXJ0X2lzX25vdF9kZWZhdWx0ZWQoKQogICAgY2FsbHN1YiBhc3NlcnRfaXNfbm90X2RlZmF1bHRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODIxCiAgICAvLyBzZWxmLmFzc2VydF9pc19ub3Rfc3VzcGVuZGVkKCkKICAgIGNhbGxzdWIgYXNzZXJ0X2lzX25vdF9zdXNwZW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjgyMgogICAgLy8gYXNzZXJ0IHVuaXRzLm5hdGl2ZSA+IDAsIGVyci5aRVJPX1VOSVRTCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ0b2kKICAgIGR1cAogICAgYXNzZXJ0IC8vIENhbiBub3QgZGlzdHJpYnV0ZSB6ZXJvIHVuaXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4MjQKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKyB1bml0cy5uYXRpdmUgPD0gc2VsZi50b3RhbF91bml0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImNpcmN1bGF0aW5nX3VuaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzIGV4aXN0cwogICAgZGlnIDEKICAgICsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAidG90YWxfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWxfdW5pdHMgZXhpc3RzCiAgICA8PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODIzLTgyNQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzICsgdW5pdHMubmF0aXZlIDw9IHNlbGYudG90YWxfdW5pdHMKICAgIC8vICksIGVyci5PVkVSX0RJU1RSSUJVVElPTgogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCByZW1haW5pbmcgRC1BU0EgdW5pdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjgyNwogICAgLy8gc2VsZi5jaXJjdWxhdGluZ191bml0cyArPSB1bml0cy5uYXRpdmUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJjaXJjdWxhdGluZ191bml0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaXJjdWxhdGluZ191bml0cyBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICBieXRlY18xIC8vICJjaXJjdWxhdGluZ191bml0cyIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4MjkKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZSArIHVuaXRzLm5hdGl2ZQogICAgZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDMyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4MjgtODMwCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZSArIHVuaXRzLm5hdGl2ZQogICAgLy8gKQogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODI4CiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cyA9IGFyYzQuVUludDY0KAogICAgZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4MjgtODMwCiAgICAvLyBzZWxmLmFjY291bnRbaG9sZGluZ19hZGRyZXNzXS51bml0cyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRzLm5hdGl2ZSArIHVuaXRzLm5hdGl2ZQogICAgLy8gKQogICAgc3dhcAogICAgcmVwbGFjZTIgMzIKICAgIGRpZyAxCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4MzEKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnVuaXRfdmFsdWUgPSBhcmM0LlVJbnQ2NChzZWxmLnVuaXRfdmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gInVuaXRfdmFsdWUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudW5pdF92YWx1ZSBleGlzdHMKICAgIGl0b2IKICAgIGRpZyAxCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgc3dhcAogICAgcmVwbGFjZTIgNDAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjgzMgogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KHNlbGYudG90YWxfdW5pdHMgLSBzZWxmLmNpcmN1bGF0aW5nX3VuaXRzKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJ0b3RhbF91bml0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbF91bml0cyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJjaXJjdWxhdGluZ191bml0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaXJjdWxhdGluZ191bml0cyBleGlzdHMKICAgIC0KICAgIGl0b2IKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9ib29sX2ZhbHNlQDEyOgogICAgaW50Y18wIC8vIDAKICAgIGIgcHJpbWFyeV9kaXN0cmlidXRpb25fYm9vbF9tZXJnZUAxMwoKcHJpbWFyeV9kaXN0cmlidXRpb25fYm9vbF9mYWxzZUA1OgogICAgaW50Y18wIC8vIDAKICAgIGIgcHJpbWFyeV9kaXN0cmlidXRpb25fYm9vbF9tZXJnZUA2CgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2Euc2V0X2Fzc2V0X3N1c3BlbnNpb24oc3VzcGVuZGVkOiBieXRlcykgLT4gYnl0ZXM6CnNldF9hc3NldF9zdXNwZW5zaW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODM0LTgzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICAvLyBkZWYgc2V0X2Fzc2V0X3N1c3BlbnNpb24oc2VsZiwgc3VzcGVuZGVkOiBhcmM0LkJvb2wpIC0+IGFyYzQuVUludDY0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4NDgKICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hdXRob3JpdHkoKQogICAgY2FsbHN1YiBhc3NlcnRfY2FsbGVyX2lzX2F1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODQ5CiAgICAvLyBzZWxmLnN1c3BlbmRlZCA9IFVJbnQ2NChzdXNwZW5kZWQubmF0aXZlKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlYyAyMCAvLyAic3VzcGVuZGVkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojg1MAogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKQogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2EuYXNzZXJ0X2NhbGxlcl9pc19hdXRob3JpdHkoKSAtPiB2b2lkOgphc3NlcnRfY2FsbGVyX2lzX2F1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE0OS0xNTAKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYXNzZXJ0X2NhbGxlcl9pc19hdXRob3JpdHkoc2VsZikgLT4gTm9uZToKICAgIHByb3RvIDAgMAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE1MwogICAgLy8gY2FsbGVyIGluIHNlbGYuYXV0aG9yaXR5CiAgICBieXRlYyAyNCAvLyAweDUyMzczMDIzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxNTEKICAgIC8vIGNhbGxlciA9IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKQogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTUzCiAgICAvLyBjYWxsZXIgaW4gc2VsZi5hdXRob3JpdHkKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE1My0xNTYKICAgIC8vIGNhbGxlciBpbiBzZWxmLmF1dGhvcml0eQogICAgLy8gYW5kIHNlbGYuYXV0aG9yaXR5W2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHNlbGYuYXV0aG9yaXR5W2NhbGxlcl0ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IGFzc2VydF9jYWxsZXJfaXNfYXV0aG9yaXR5X2Jvb2xfZmFsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTU0CiAgICAvLyBhbmQgc2VsZi5hdXRob3JpdHlbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXV0aG9yaXR5IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAwIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxNTUKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxNTQtMTU1CiAgICAvLyBhbmQgc2VsZi5hdXRob3JpdHlbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgaXRvYgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIGI8PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTU0LTE1NgogICAgLy8gYW5kIHNlbGYuYXV0aG9yaXR5W2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHNlbGYuYXV0aG9yaXR5W2NhbGxlcl0ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IGFzc2VydF9jYWxsZXJfaXNfYXV0aG9yaXR5X2Jvb2xfZmFsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTU2CiAgICAvLyA8PSBzZWxmLmF1dGhvcml0eVtjYWxsZXJdLnJvbGVfdmFsaWRpdHlfZW5kCiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXV0aG9yaXR5IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCA4IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxNTUtMTU2CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgLy8gPD0gc2VsZi5hdXRob3JpdHlbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDAKICAgIGI+PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTU0LTE1NgogICAgLy8gYW5kIHNlbGYuYXV0aG9yaXR5W2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIC8vIDw9IHNlbGYuYXV0aG9yaXR5W2NhbGxlcl0ucm9sZV92YWxpZGl0eV9lbmQKICAgIGJ6IGFzc2VydF9jYWxsZXJfaXNfYXV0aG9yaXR5X2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCmFzc2VydF9jYWxsZXJfaXNfYXV0aG9yaXR5X2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE1Mi0xNTcKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgY2FsbGVyIGluIHNlbGYuYXV0aG9yaXR5CiAgICAvLyAgICAgYW5kIHNlbGYuYXV0aG9yaXR5W2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPD0gc2VsZi5hdXRob3JpdHlbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgLy8gKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIE5vdCBhdXRob3JpemVkCiAgICByZXRzdWIKCmFzc2VydF9jYWxsZXJfaXNfYXV0aG9yaXR5X2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFzc2VydF9jYWxsZXJfaXNfYXV0aG9yaXR5X2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5iYXNlX2RfYXNhLmNvbnRyYWN0LkJhc2VEQXNhLnNldF9hY2NvdW50X3N1c3BlbnNpb24oaG9sZGluZ19hZGRyZXNzOiBieXRlcywgc3VzcGVuZGVkOiBieXRlcykgLT4gYnl0ZXM6CnNldF9hY2NvdW50X3N1c3BlbnNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4NTItODU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIC8vIGRlZiBzZXRfYWNjb3VudF9zdXNwZW5zaW9uKAogICAgLy8gICAgIHNlbGYsIGhvbGRpbmdfYWRkcmVzczogYXJjNC5BZGRyZXNzLCBzdXNwZW5kZWQ6IGFyYzQuQm9vbAogICAgLy8gKSAtPiBhcmM0LlVJbnQ2NDoKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODcwCiAgICAvLyBzZWxmLmFzc2VydF9jYWxsZXJfaXNfYXV0aG9yaXR5KCkKICAgIGNhbGxzdWIgYXNzZXJ0X2NhbGxlcl9pc19hdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE3MQogICAgLy8gYXNzZXJ0IGhvbGRpbmdfYWRkcmVzcyBpbiBzZWxmLmFjY291bnQsIGVyci5JTlZBTElEX0hPTERJTkdfQUREUkVTUwogICAgYnl0ZWNfMiAvLyAweDUyMzMzMDIzCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBJbnZhbGlkIGFjY291bnQgaG9sZGluZyBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo4NzIKICAgIC8vIHNlbGYuYWNjb3VudFtob2xkaW5nX2FkZHJlc3NdLnN1c3BlbmRlZCA9IHN1c3BlbmRlZAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hY2NvdW50IGVudHJ5IGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBpbnRjIDQgLy8gNDQ4CiAgICBzd2FwCiAgICBzZXRiaXQKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojg3MwogICAgLy8gcmV0dXJuIGFyYzQuVUludDY0KEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wKQogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgaXRvYgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2Euc2V0X2RlZmF1bHRfc3RhdHVzKGRlZmF1bHRlZDogYnl0ZXMpIC0+IHZvaWQ6CnNldF9kZWZhdWx0X3N0YXR1czoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojg3NS04NzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgLy8gZGVmIHNldF9kZWZhdWx0X3N0YXR1cyhzZWxmLCBkZWZhdWx0ZWQ6IGFyYzQuQm9vbCkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE0MwogICAgLy8gY2FsbGVyIGluIHNlbGYudHJ1c3RlZQogICAgYnl0ZWMgMjUgLy8gMHg1MjM2MzAyMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTQxCiAgICAvLyBjYWxsZXIgPSBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcikKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE0MwogICAgLy8gY2FsbGVyIGluIHNlbGYudHJ1c3RlZQogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTQzLTE0NgogICAgLy8gY2FsbGVyIGluIHNlbGYudHJ1c3RlZQogICAgLy8gYW5kIHNlbGYudHJ1c3RlZVtjYWxsZXJdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSBzZWxmLnRydXN0ZWVbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogc2V0X2RlZmF1bHRfc3RhdHVzX2Jvb2xfZmFsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTQ0CiAgICAvLyBhbmQgc2VsZi50cnVzdGVlW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRydXN0ZWUgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDAgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE0NQogICAgLy8gPD0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE0NC0xNDUKICAgIC8vIGFuZCBzZWxmLnRydXN0ZWVbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X3N0YXJ0CiAgICAvLyA8PSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcAogICAgaXRvYgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIGI8PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTQ0LTE0NgogICAgLy8gYW5kIHNlbGYudHJ1c3RlZVtjYWxsZXJdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSBzZWxmLnRydXN0ZWVbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogc2V0X2RlZmF1bHRfc3RhdHVzX2Jvb2xfZmFsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTQ2CiAgICAvLyA8PSBzZWxmLnRydXN0ZWVbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRydXN0ZWUgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDggOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjE0NS0xNDYKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSBzZWxmLnRydXN0ZWVbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgZnJhbWVfZGlnIDAKICAgIGI+PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTQ0LTE0NgogICAgLy8gYW5kIHNlbGYudHJ1c3RlZVtjYWxsZXJdLnJvbGVfdmFsaWRpdHlfc3RhcnQKICAgIC8vIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyA8PSBzZWxmLnRydXN0ZWVbY2FsbGVyXS5yb2xlX3ZhbGlkaXR5X2VuZAogICAgYnogc2V0X2RlZmF1bHRfc3RhdHVzX2Jvb2xfZmFsc2VANQogICAgaW50Y18xIC8vIDEKCnNldF9kZWZhdWx0X3N0YXR1c19ib29sX21lcmdlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxNDItMTQ3CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIGNhbGxlciBpbiBzZWxmLnRydXN0ZWUKICAgIC8vICAgICBhbmQgc2VsZi50cnVzdGVlW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9zdGFydAogICAgLy8gICAgIDw9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICAvLyAgICAgPD0gc2VsZi50cnVzdGVlW2NhbGxlcl0ucm9sZV92YWxpZGl0eV9lbmQKICAgIC8vICksIGVyci5VTkFVVEhPUklaRUQKICAgIGFzc2VydCAvLyBOb3QgYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6ODg3CiAgICAvLyBzZWxmLmRlZmF1bHRlZCA9IFVJbnQ2NChkZWZhdWx0ZWQubmF0aXZlKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBieXRlYyAyMSAvLyAiZGVmYXVsdGVkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKc2V0X2RlZmF1bHRfc3RhdHVzX2Jvb2xfZmFsc2VANToKICAgIGludGNfMCAvLyAwCiAgICBiIHNldF9kZWZhdWx0X3N0YXR1c19ib29sX21lcmdlQDYKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5nZXRfYXNzZXRfaW5mbygpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfaW5mbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojg4OS04OTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9pbmZvKHNlbGYpIC0+IHR5cC5Bc3NldEluZm86CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojg5OQogICAgLy8gcGVyZm9ybWFuY2UgPSBVSW50NjQoY3N0LlBSRl9QRVJGT1JNQU5UKQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTAwCiAgICAvLyBpZiBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA+IHNlbGYubWF0dXJpdHlfZGF0ZSA+IDA6CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAibWF0dXJpdHlfZGF0ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hdHVyaXR5X2RhdGUgZXhpc3RzCiAgICA+CiAgICBieiBnZXRfYXNzZXRfaW5mb19hZnRlcl9pZl9lbHNlQDMKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDIKICAgIGZyYW1lX2RpZyAxCiAgICBieiBnZXRfYXNzZXRfaW5mb19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkwMQogICAgLy8gcGVyZm9ybWFuY2UgPSBVSW50NjQoY3N0LlBSRl9NQVRVUkVEKQogICAgaW50Y18zIC8vIDQKICAgIGZyYW1lX2J1cnkgMgoKZ2V0X2Fzc2V0X2luZm9fYWZ0ZXJfaWZfZWxzZUAzOgogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTAyLTkwMwogICAgLy8gIyBUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGhhcyBubyBncmFjZSBvciBkZWxpbnF1ZW5jeSBwZXJpb2RzCiAgICAvLyBpZiBzZWxmLmRlZmF1bHRlZDoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMSAvLyAiZGVmYXVsdGVkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlZmF1bHRlZCBleGlzdHMKICAgIGJ6IGdldF9hc3NldF9pbmZvX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTA0CiAgICAvLyBwZXJmb3JtYW5jZSA9IFVJbnQ2NChjc3QuUFJGX0RFRkFVTFRFRCkKICAgIHB1c2hpbnQgMyAvLyAzCiAgICBmcmFtZV9idXJ5IDAKCmdldF9hc3NldF9pbmZvX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkwNwogICAgLy8gZGVub21pbmF0aW9uX2Fzc2V0X2lkPWFyYzQuVUludDY0KHNlbGYuZGVub21pbmF0aW9uX2Fzc2V0X2lkKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOCAvLyAiZGVub21pbmF0aW9uX2Fzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkwOAogICAgLy8gc2V0dGxlbWVudF9hc3NldF9pZD1hcmM0LlVJbnQ2NChzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gInNldHRsZW1lbnRfYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2V0dGxlbWVudF9hc3NldF9pZCBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjMzNQogICAgLy8gcmV0dXJuIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgKiBzZWxmLnVuaXRfdmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJjaXJjdWxhdGluZ191bml0cyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaXJjdWxhdGluZ191bml0cyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAidW5pdF92YWx1ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X3ZhbHVlIGV4aXN0cwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTA5CiAgICAvLyBvdXRzdGFuZGluZ19wcmluY2lwYWw9YXJjNC5VSW50NjQoc2VsZi5vdXRzdGFuZGluZ19wcmluY2lwYWwoKSksCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo5MTAKICAgIC8vIHVuaXRfdmFsdWU9YXJjNC5VSW50NjQoc2VsZi51bml0X3ZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMCAvLyAidW5pdF92YWx1ZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi51bml0X3ZhbHVlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTExCiAgICAvLyBkYXlfY291bnRfY29udmVudGlvbj1hcmM0LlVJbnQ4KHNlbGYuZGF5X2NvdW50X2NvbnZlbnRpb24pLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vICJkYXlfY291bnRfY29udmVudGlvbiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kYXlfY291bnRfY29udmVudGlvbiBleGlzdHMKICAgIGl0b2IKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo5MTIKICAgIC8vIGludGVyZXN0X3JhdGU9YXJjNC5VSW50MTYoc2VsZi5pbnRlcmVzdF9yYXRlKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJpbnRlcmVzdF9yYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmludGVyZXN0X3JhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTEzCiAgICAvLyB0b3RhbF9zdXBwbHk9YXJjNC5VSW50NjQoc2VsZi50b3RhbF91bml0cyksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTIgLy8gInRvdGFsX3VuaXRzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnRvdGFsX3VuaXRzIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTE0CiAgICAvLyBjaXJjdWxhdGluZ19zdXBwbHk9YXJjNC5VSW50NjQoc2VsZi5jaXJjdWxhdGluZ191bml0cyksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiY2lyY3VsYXRpbmdfdW5pdHMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfdW5pdHMgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo5MTYKICAgIC8vIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOSAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkxNS05MTcKICAgIC8vIHByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZT1hcmM0LlVJbnQ2NCgKICAgIC8vICAgICBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX29wZW5pbmdfZGF0ZQogICAgLy8gKSwKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkxOQogICAgLy8gc2VsZi5wcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxOSAvLyAicHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkxOC05MjAKICAgIC8vIHByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZT1hcmM0LlVJbnQ2NCgKICAgIC8vICAgICBzZWxmLnByaW1hcnlfZGlzdHJpYnV0aW9uX2Nsb3N1cmVfZGF0ZQogICAgLy8gKSwKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkyMQogICAgLy8gaXNzdWFuY2VfZGF0ZT1hcmM0LlVJbnQ2NChzZWxmLmlzc3VhbmNlX2RhdGUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImlzc3VhbmNlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaXNzdWFuY2VfZGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkyMgogICAgLy8gbWF0dXJpdHlfZGF0ZT1hcmM0LlVJbnQ2NChzZWxmLm1hdHVyaXR5X2RhdGUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gIm1hdHVyaXR5X2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWF0dXJpdHlfZGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkyMwogICAgLy8gc3VzcGVuZGVkPWFyYzQuQm9vbChib29sKHNlbGYuc3VzcGVuZGVkKSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjAgLy8gInN1c3BlbmRlZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdXNwZW5kZWQgZXhpc3RzCiAgICBieXRlYyAxNiAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkyNAogICAgLy8gcGVyZm9ybWFuY2U9YXJjNC5VSW50OChwZXJmb3JtYW5jZSksCiAgICBmcmFtZV9kaWcgMAogICAgaXRvYgogICAgZXh0cmFjdCA3IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjkwNi05MjUKICAgIC8vIHJldHVybiB0eXAuQXNzZXRJbmZvKAogICAgLy8gICAgIGRlbm9taW5hdGlvbl9hc3NldF9pZD1hcmM0LlVJbnQ2NChzZWxmLmRlbm9taW5hdGlvbl9hc3NldF9pZCksCiAgICAvLyAgICAgc2V0dGxlbWVudF9hc3NldF9pZD1hcmM0LlVJbnQ2NChzZWxmLnNldHRsZW1lbnRfYXNzZXRfaWQpLAogICAgLy8gICAgIG91dHN0YW5kaW5nX3ByaW5jaXBhbD1hcmM0LlVJbnQ2NChzZWxmLm91dHN0YW5kaW5nX3ByaW5jaXBhbCgpKSwKICAgIC8vICAgICB1bml0X3ZhbHVlPWFyYzQuVUludDY0KHNlbGYudW5pdF92YWx1ZSksCiAgICAvLyAgICAgZGF5X2NvdW50X2NvbnZlbnRpb249YXJjNC5VSW50OChzZWxmLmRheV9jb3VudF9jb252ZW50aW9uKSwKICAgIC8vICAgICBpbnRlcmVzdF9yYXRlPWFyYzQuVUludDE2KHNlbGYuaW50ZXJlc3RfcmF0ZSksCiAgICAvLyAgICAgdG90YWxfc3VwcGx5PWFyYzQuVUludDY0KHNlbGYudG90YWxfdW5pdHMpLAogICAgLy8gICAgIGNpcmN1bGF0aW5nX3N1cHBseT1hcmM0LlVJbnQ2NChzZWxmLmNpcmN1bGF0aW5nX3VuaXRzKSwKICAgIC8vICAgICBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGU9YXJjNC5VSW50NjQoCiAgICAvLyAgICAgICAgIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fb3BlbmluZ19kYXRlCiAgICAvLyAgICAgKSwKICAgIC8vICAgICBwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9jbG9zdXJlX2RhdGU9YXJjNC5VSW50NjQoCiAgICAvLyAgICAgICAgIHNlbGYucHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlCiAgICAvLyAgICAgKSwKICAgIC8vICAgICBpc3N1YW5jZV9kYXRlPWFyYzQuVUludDY0KHNlbGYuaXNzdWFuY2VfZGF0ZSksCiAgICAvLyAgICAgbWF0dXJpdHlfZGF0ZT1hcmM0LlVJbnQ2NChzZWxmLm1hdHVyaXR5X2RhdGUpLAogICAgLy8gICAgIHN1c3BlbmRlZD1hcmM0LkJvb2woYm9vbChzZWxmLnN1c3BlbmRlZCkpLAogICAgLy8gICAgIHBlcmZvcm1hbmNlPWFyYzQuVUludDgocGVyZm9ybWFuY2UpLAogICAgLy8gKQogICAgdW5jb3ZlciAxMwogICAgdW5jb3ZlciAxMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDEyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMAogICAgY29uY2F0CiAgICB1bmNvdmVyIDkKICAgIGNvbmNhdAogICAgdW5jb3ZlciA4CiAgICBjb25jYXQKICAgIHVuY292ZXIgNwogICAgY29uY2F0CiAgICB1bmNvdmVyIDYKICAgIGNvbmNhdAogICAgdW5jb3ZlciA1CiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5nZXRfYWNjb3VudF9pbmZvKGhvbGRpbmdfYWRkcmVzczogYnl0ZXMpIC0+IGJ5dGVzOgpnZXRfYWNjb3VudF9pbmZvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTI3LTkyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2FjY291bnRfaW5mbyhzZWxmLCBob2xkaW5nX2FkZHJlc3M6IGFyYzQuQWRkcmVzcykgLT4gdHlwLkFjY291bnRJbmZvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weToxNzEKICAgIC8vIGFzc2VydCBob2xkaW5nX2FkZHJlc3MgaW4gc2VsZi5hY2NvdW50LCBlcnIuSU5WQUxJRF9IT0xESU5HX0FERFJFU1MKICAgIGJ5dGVjXzIgLy8gMHg1MjMzMzAyMwogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBhY2NvdW50IGhvbGRpbmcgYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTQyCiAgICAvLyByZXR1cm4gc2VsZi5hY2NvdW50W2hvbGRpbmdfYWRkcmVzc10KICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFjY291bnQgZW50cnkgZXhpc3RzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYmFzZV9kX2FzYS5jb250cmFjdC5CYXNlREFzYS5nZXRfdGltZV9ldmVudHMoKSAtPiBieXRlczoKZ2V0X3RpbWVfZXZlbnRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTQ0LTk0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X3RpbWVfZXZlbnRzKHNlbGYpIC0+IHR5cC5UaW1lRXZlbnRzOgogICAgcHJvdG8gMCAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo5NTIKICAgIC8vIHRpbWVfZXZlbnRzID0gdHlwLlRpbWVFdmVudHMoKQogICAgcHVzaGJ5dGVzIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6MTAxCiAgICAvLyByZXR1cm4gc2VsZi5zdGF0dXMgPT0gY2ZnLlNUQVRVU19BQ1RJVkUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJzdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgcHVzaGludCAxMDAgLy8gMTAwCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTUzCiAgICAvLyBpZiBzZWxmLnN0YXR1c19pc19hY3RpdmUoKToKICAgIGJ6IGdldF90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojk1NAogICAgLy8gdGltZV9ldmVudHMgPSBzZWxmLnRpbWVfZXZlbnRzLnZhbHVlLmNvcHkoKQogICAgYnl0ZWMgMjMgLy8gMHg3NDY5NmQ2NTQ1NzY2NTZlNzQ3MwogICAgYm94X2dldAogICAgc3dhcAogICAgZnJhbWVfYnVyeSAwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50aW1lX2V2ZW50cyBleGlzdHMKCmdldF90aW1lX2V2ZW50c19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo5NTUKICAgIC8vIHJldHVybiB0aW1lX2V2ZW50cwogICAgZnJhbWVfZGlnIDAKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5iYXNlX2RfYXNhLmNvbnRyYWN0LkJhc2VEQXNhLmdldF9zZWNvbmRhcnlfbWFya2V0X3NjaGVkdWxlKCkgLT4gYnl0ZXM6CmdldF9zZWNvbmRhcnlfbWFya2V0X3NjaGVkdWxlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTU3LTk1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X3NlY29uZGFyeV9tYXJrZXRfc2NoZWR1bGUoc2VsZikgLT4gdHlwLlRpbWVFdmVudHM6CiAgICBwcm90byAwIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojk2NgogICAgLy8gYXJjNC5VSW50NjQoc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTQgLy8gInNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTY3CiAgICAvLyBhcmM0LlVJbnQ2NChzZWxmLnNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNSAvLyAic2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2Vjb25kYXJ5X21hcmtldF9jbG9zdXJlX2RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYmFzZV9kX2FzYS9jb250cmFjdC5weTo5NjUtOTY4CiAgICAvLyByZXR1cm4gdHlwLlRpbWVFdmVudHMoCiAgICAvLyAgICAgYXJjNC5VSW50NjQoc2VsZi5zZWNvbmRhcnlfbWFya2V0X29wZW5pbmdfZGF0ZSksCiAgICAvLyAgICAgYXJjNC5VSW50NjQoc2VsZi5zZWNvbmRhcnlfbWFya2V0X2Nsb3N1cmVfZGF0ZSksCiAgICAvLyApCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmJhc2VfZF9hc2EuY29udHJhY3QuQmFzZURBc2EuZ2V0X2Fzc2V0X21ldGFkYXRhKCkgLT4gYnl0ZXM6CmdldF9hc3NldF9tZXRhZGF0YToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5Ojk3MC05NzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9tZXRhZGF0YShzZWxmKSAtPiB0eXAuQXNzZXRNZXRhZGF0YToKICAgIHByb3RvIDAgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Jhc2VfZF9hc2EvY29udHJhY3QucHk6OTc5CiAgICAvLyByZXR1cm4gdHlwLkFzc2V0TWV0YWRhdGEuZnJvbV9ieXRlcyhzZWxmLm1ldGFkYXRhKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vICJtZXRhZGF0YSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tZXRhZGF0YSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5iYXNlX2RfYXNhLmNvbnRyYWN0LkJhc2VEQXNhLmFzc2V0X3VwZGF0ZSgpIC0+IHZvaWQ6CmFzc2V0X3VwZGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjQ2OC00NjkKICAgIC8vIEBhcmM0LmJhcmVtZXRob2QoYWxsb3dfYWN0aW9ucz1bIlVwZGF0ZUFwcGxpY2F0aW9uIl0pCiAgICAvLyBkZWYgYXNzZXRfdXBkYXRlKHNlbGYpIC0+IE5vbmU6CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9iYXNlX2RfYXNhL2NvbnRyYWN0LnB5OjQ3My00NzYKICAgIC8vICMgVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBncmFudHMgdGhlIHVwZGF0ZSBwZXJtaXNzaW9ucyB0byB0aGUgQXJyYW5nZXIuCiAgICAvLyAjIE90aGVyIGltcGxlbWVudGF0aW9ucyBtYXkgZGlzYWJsZSBELUFTQSBhcHBsaWNhdGlvbiB1cGRhdGFiaWxpdHkgb3IgY2hhbmdlIGl0cyBhdXRob3JpemF0aW9ucy4KICAgIC8vICMg4pqg77iPIFdBUk5JTkc6IEFwcGxpY2F0aW9uIHVwZGF0ZXMgbXVzdCBiZSBleGVjdXRlZCBWRVJZIGNhcmVmdWxseSwgYXMgdGhleSBtaWdodCBpbnRyb2R1Y2UgYnJlYWtpbmcgY2hhbmdlcy4KICAgIC8vIHNlbGYuYXNzZXJ0X2NhbGxlcl9pc19hcnJhbmdlcigpCiAgICBjYWxsc3ViIGFzc2VydF9jYWxsZXJfaXNfYXJyYW5nZXIKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CiAIAAEIBMADkE6AowXIASYfBBUffHURY2lyY3VsYXRpbmdfdW5pdHMEUjMwIwZzdGF0dXMNbWF0dXJpdHlfZGF0ZRNzZXR0bGVtZW50X2Fzc2V0X2lkDWlzc3VhbmNlX2RhdGUIAAAAAAAAAAANaW50ZXJlc3RfcmF0ZSFwcmltYXJ5X2Rpc3RyaWJ1dGlvbl9vcGVuaW5nX2RhdGUKdW5pdF92YWx1ZRRkYXlfY291bnRfY29udmVudGlvbgt0b3RhbF91bml0cw10b3RhbF9jb3Vwb25zHXNlY29uZGFyeV9tYXJrZXRfb3BlbmluZ19kYXRlHXNlY29uZGFyeV9tYXJrZXRfY2xvc3VyZV9kYXRlAQAEUjIwIxVkZW5vbWluYXRpb25fYXNzZXRfaWQhcHJpbWFyeV9kaXN0cmlidXRpb25fY2xvc3VyZV9kYXRlCXN1c3BlbmRlZAlkZWZhdWx0ZWQIbWV0YWRhdGEKdGltZUV2ZW50cwRSNzAjBFI2MCMEUjUwIwRSNDAjC2NvdXBvblJhdGVzAwaBAQRSODAjMRhAAGAnETIDZycSImcnBSJnJwoiZycLImcnFoAAZycMImcpImcnCCJnJw0iZycJImcnEyJnJwYiZycOImcnDyJnJwQiZysiZycUImcnFSJnMTWBAhJEMTSBERJEMTcURDE2FEQxG0ECM4IUBE/Wo8wEnHa2owRENj1JBGfbTyAEPw78bATTpNarBB1vwlUE/vdFZwS4/BOQBD1D0fAE69lrLwRshePuBPY6zo0Eu8yhigQae6u0BBRgqWYE7QJ1nwT60hc+BAjv6jUE5KWrVDYaAI4UAYcBcQFbAUgBNQEOAPsA4gDMALYAowCNAHoAZABVAEUAMgAiABIAAiJDMRkURDEYRIgL7ShMULAjQzEZFEQxGESIC8YoTFCwI0MxGRREMRhEiAuaKExQsCNDMRkURDEYRDYaAYgLeChMULAjQzEZFEQxGESICqgoTFCwI0MxGRREMRhENhoBiApYI0MxGRREMRhENhoBNhoCiAonKExQsCNDMRkURDEYRDYaAYgJzShMULAjQzEZFEQxGEQ2GgE2GgKICPgoTFCwI0MxGRREMRhENhoBiAi2KExQsCNDMRkURDEYRDYaATYaAogIOShMULAjQzEZFEQxGEQ2GgE2GgKIB4coTFCwI0MxGRREMRhENhoBNhoCNhoDiAamKExQsCNDMRkURDEYRDYaAYgGFihMULAjQzEZFEQxGEQ2GgE2GgI2GgM2GgQ2GgU2GgY2Ggc2Ggg2GgmIBEQjQzEZFEQxGBRENhoBNhoCiAQjI0MxGRREMRhENhoBiAPgKExQsCNDMRkURDEYRDYaATYaAogC/ShMULAjQzEZFEQxGEQ2GgE2GgKIAgkoTFCwI0MxGRREMRhENhoBNhoCNhoDiAAYKExQsCNDJTEZjgEAA0L+VjEYRIgKUiNDigMBIkcCgABJi/8XIitlRIFkEkEBMiInDmVEMgdJjAQOQQEkIicPZUSLBA1BARkjRDEAi/0SRIgBEogBGiqL/VBJjAFJvUUBRCqL/lBJjAJJvUUBREsBvkQhBFMnECJPAlQiUxRESb5EIQRTJxAiTwJUIlMUREsBvkRXIAgXiwUPREy+RFcoCIwAvkRXIAgXQQCWiwG+RFcoCIsCvkRXKAioQQCAiwG+RFcwCIsCvkRXMAioQQBuI0SLAUm+RFcoCIwAi/2LBUlOA4gAlYwDSb5EVyAIF0sCCRZLAb5ETFwgSwFMv4sCSb5EVyAIF08DCBZLAb5ETFwgv75EVyAIF0AAFYsBSb5EJwdcKEsBTL9JvkQnB1wwv4sAF4sFC4sDCBaMAIkiQv+PiwJJvkSLAFwoSwFMv4sBvkRLAb5ETFcwCFwwv0L/cSJC/uSKAAAiJxVlRBREiYoAACInFGVEFESJigIBiAAhSVcACBdMVwgIF4v+i/+IAE4iJwhlRAtPAgshBU8CCwqJigABMgciJwZlRAlJIicEZUQiJwZlRAlJTgIiJwtlRExOAkAADosAIQYKiwEhBgqMAowDiwKLAxZMFlCMAImKAgEqi/5QvkRXKAgXi/8LiYoCASIrZUSBZBJEiP9miP9uKov+UEcCvUUBREm+RFcgCBdEMgciJwRlRA9EvkRXACAiJwVlRHAARQFBAHqLAL5EIQRTJxAiTwJUIlNAAGgjQQBgi/6IAGNJMgoiJwVlRHAAREsBD0SLAL5EVwAgsTIAIicFZURPA7ISTwKyFLIRJbIQsgGzIillRIsASU4CvkRXIAgXCSlMZ0m+RCcHXCC/iAArFjIHFlCAAgASUIv/UEyJIkL/zyJC/5WKAQEqi/9QvkRXIAgXi/9MiP8hiYoAACIpZURAAAQrIQdniYoCASKAAEcGIicJZURBALkyByInCWVED0EAriNEKov+UEmMAL1FAUSL/ycHpUEAlYsAvkRXIAgXFov/p0EAhiNEi/8XSYwHi/5MiP7ESYwCIicIZURLAQshBQoJjAEijAMijAYijAUiJwZlRDIHSYwEDkEATCInBGVEiwQNQQBBI0EAGYj+TIv+iweI/h6MA0lXAAgXjAZXCAgXjAUyByInBGVED0EABIsCjAGLARaLAxaLBhaLBRZQTgJQTFCMAIkiQv+8IkL/dyJC/0+KAQEqi/9QvUUBRCJHAitlRIFkEkEAE4v/iP70SYwBIicIZUQLIQUKjACLABaLARZQjACJigIAJxGL/mcnFov/Z4mKCQAigABJiAEMIitlRBREi/cXSUEA+4sDcQtEMgMTQQDwI0QnEosDZ4v4FyInEmVESwESRCcFTGexMgAiJwVlRDIKIrISshSyESWyELIBs4v5F4v6F0oYFEQnCksBZwonDExni/sXSYwBQQAJiwGB/wESQQCYI0QnC4sBZ4v8F0lEJwhMZ4v9IllJFEQnDUxnIicNZURBAAknHLxIJxyL/b+L/iJZIicNZUQlCBJEi/6IAG+M/icXvEgnF4v+v4v+VwIASYwASVcACBcnCUxnSVcICBcnE0xnVxAIFycGTGeL/iJZSYwCIicNZUQlCBJBABCLAiMJJAuLAEwkWBcnBExni/8iWRREK4FkZ4kiQv9lIkL/DYoAADEAIicRZUQSRImKAQGAAEmL/1cCAElXAAgXMgcNRIv/IlkjCSKLBIsDDEEAXIFLMgwNQQAZsYEGshCBBbIZJx2yHicdsh8yALIBs0L/34sESSQLiwJJTgNMJFgXSU4DjAEjCEmMBCQLJFgXSYwADEQiJwtlRIH/ARNB/6mLAIsBCSEGGBREQv+ci/+MAImKAQEiiP9oIitlRCEHEhREiPvNi/8iWUlEIw2L/0xBAAqL/4j/VkmM/4wBiwGM/yInBmVEi/9XAgBJjABXAAgXTEsBDkQnDkxnIicEZURBABwiJwRlRIv/IlkjCSQLiwBMJFgXTEsBD0QnD0xnIicOZUQWIicPZUQWUIwAiYoDAYj+7Ij7Wov+F0mBFBJAACiLAIEoEkAAIIsAgTISQAAYiwCBPBJAABCLAIFGEkAACIsAgVASQQCJI0SDBhQoMjxGUIsAjgYAZwBTAD8AKwAXAAEAJx6L/VBJvUUBFESL/1cCAL8yBxZMiScYi/1QSb1FARREi/9XAgC/Qv/nJxmL/VBJvUUBFESL/1cCAL9C/9MnGov9UEm9RQEURIv/VwIAv0L/vycbi/1QSb1FARREi/9XAgC/Qv+rJxGL/WdC/6MiQv90igIBiP4kiPqSi/8XSYEoEkAAIIsAgTISQAAYiwCBPBJAABCLAIFGEkAACIsAgVASQQBlI0SDBSgyPEZQiwCOBQA/ADAAIQASAAEAJx6L/lBJvUUBRLxIMgcWTIknGIv+UEm9RQFEvEhC/+wnGYv+UEm9RQFEvEhC/90nGov+UEm9RQFEvEhC/84nG4v+UEm9RQFEvEhC/78iQv+YigIBiAAsIitlRCEHEhREiPntiPn1Kov+UEm9RQEURIv/JwdQJwdQJwdQJxBQvzIHFomKAAAiJxsxAFBJvUUBQQAhiwG+RFcACDIHFkmMAKZBABCLAb5EVwgIiwCnQQADI0SJIkL/+ooBAYj/xYj5jyqL/1BJvUUBREm+RFcgCBdMvEgiKWVESwEJKUxniPrKFjIHFlCJigIBIkmAACIrZUSBZBJBAKoiJwllRDIHSYwCDkEAnCInE2VEiwINQQCRI0QnGjEAUEmMAL1FAUEAfYsAvkRXAAgyBxZJjAGmQQBsiwC+RFcICIsBp0EAXyNEKov+UEm9RQFEiPkDiPkLi/8XSUQiKWVESwEIIicMZUQORCIpZURLAQgpTGdLAb5EVyAIFwgWSwG+RExcIEsBTL8iJwplRBZLAb5ETFwovyInDGVEIillRAkWjACJIkL/niJC/2yKAQGIAAyL/yJTJxRMZzIHFomKAAAiJxgxAFBJvUUBQQAhiwG+RFcACDIHFkmMAKZBABCLAb5EVwgIiwCnQQADI0SJIkL/+ooCAYj/xSqL/lBJvUUBREm+RIv/IlMhBExUvzIHFomKAQAiJxkxAFBJvUUBQQApiwG+RFcACDIHFkmMAKZBABiLAb5EVwgIiwCnQQALI0SL/yJTJxVMZ4kiQv/yigABIkkyByInBGVMSU4CTgREDUEADIsAjAKLAUEAAyWMAosCjAAiJxVlREEABIEDjAAiJxJlRBYiJwVlRBYiKWVEIicKZUQLFiInCmVEFiInC2VEFlcHASInCGVEFlcGAiInDGVEFiIpZUQWIicJZUQWIicTZUQWIicGZUQWIicEZUQWIicUZUQnECJPAlSLABZXBwFPDU8NUE8MUE8LUE8KUE8JUE8IUE8HUE8GUE8FUE8EUE8DUE8CUExQjACJigEBKov/UEm9RQFEvkSJigABgAIAACIrZUSBZBJBAAcnF75MjABEiwBMiYoAASInDmVEFiInD2VEFlCAAgACTFCJigABIicWZUSJigAAiPqFiQ==", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, "minor": 2, "patch": 0 } }, "events": [], "templateVariables": {} }