@kusinta/iot-schema 0.2.0-beta.40 → 0.2.0-beta.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,7 @@
4
4
 
5
5
  import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
- import type { DeviceOwnershipType, SpaceType } from "../../common/v1/types_pb.js";
7
+ import type { AssetOwner, DeviceOwnershipType, SpaceType } from "../../common/v1/types_pb.js";
8
8
  import type { ConnectorId, DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
9
9
  import type { MembershipRelation, Role } from "../../access/v1/roles_pb.js";
10
10
  import type { LorawanProvisioning } from "../../vendor/lorawan/v1/lorawan_pb.js";
@@ -12,6 +12,7 @@ import type { Space } from "../../space/v1/space_pb.js";
12
12
  import type { LinkFunction, LinkMode, LinkSettings } from "../../link/v1/link_pb.js";
13
13
  import type { ClimateModeKind, ClimateSummaryPeriod } from "../../climate/v1/climate_pb.js";
14
14
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
15
+ import type { CancelHouseholdHandover, ConfirmHouseholdHandover, DemoteHouseholdAdmin, ExportHouseholdData, ListHouseholdHandovers, SetHomeName, StaffAppointment, StartHouseholdHandover } from "./household_pb.js";
15
16
  import type { ServiceSignal } from "../../access/v1/acl_pb.js";
16
17
  import type { ComfortLoad, ComfortWindow, FloorZone, HeatingCircuit, HeatingPlant } from "../../heating/v1/heating_pb.js";
17
18
  import type { LinkedService } from "../../accountlink/v1/account_link_pb.js";
@@ -33,6 +34,9 @@ export declare const file_kusinta_iot_webrtc_v1_management: GenFile;
33
34
  * UpdateSpace is, and refused whatever the caller where UpdateSpace's structure rules would
34
35
  * refuse it.
35
36
  *
37
+ * An apartment is created by the property owner or the gateway's administrators, with a name
38
+ * that identifies it in the building (space.v1.Space.name); an empty name is INVALID_REQUEST.
39
+ *
36
40
  * @generated from message kusinta.iot.webrtc.v1.CreateSpace
37
41
  */
38
42
  export declare type CreateSpace = Message<"kusinta.iot.webrtc.v1.CreateSpace"> & {
@@ -93,6 +97,11 @@ export declare const CreateSpaceSchema: GenMessage<CreateSpace>;
93
97
  * ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN, who see them, and is refused if it would
94
98
  * leave a RESIDENT membership on a room.
95
99
  *
100
+ * The name of an apartment is the building's identifier for it (space.v1.Space.name), and is
101
+ * changed only by the property owner or the gateway's administrators: from anyone else, a
102
+ * request setting it is refused whole as NOT_ENTITLED. The household names its home with
103
+ * SetHomeName instead.
104
+ *
96
105
  * Every descriptive field carries explicit presence: absent means leave it alone, present
97
106
  * means set it to this — including to the empty string, which is how a description is
98
107
  * cleared.
@@ -198,6 +207,12 @@ export declare const DeleteSpaceSchema: GenMessage<DeleteSpace>;
198
207
  * Assigning a user who is already a member changes their relation to the space.
199
208
  * RESIDENT is refused on a room; see access.v1.MembershipRelation.
200
209
  *
210
+ * Nobody is made a household admin through it: HOUSEHOLD_ADMIN is refused as
211
+ * INVALID_REQUEST, since that comes only by promotion or appointment (household.proto). A
212
+ * HOUSEHOLD_ADMIN membership is never changed through it either: assigning onto one is refused
213
+ * as FAILED_PRECONDITION with metadata {"reason": "household_admin"}; DemoteHouseholdAdmin and
214
+ * RemoveUserFromSpace are how it ends.
215
+ *
201
216
  * Who may change who belongs to a home is restricted by the gateway; a caller not allowed is
202
217
  * refused as NOT_ENTITLED. Residents see who is filed on their home in Space.members.
203
218
  *
@@ -239,9 +254,12 @@ export declare const AssignUserToSpaceSchema: GenMessage<AssignUserToSpace>;
239
254
  * Removes a user's membership of a space. Losing reach also drops whatever the
240
255
  * user was streaming from it, announced by LivePermissionUpdate.
241
256
  *
242
- * Removing someone else from a home is guarded as assigning is. A membership the caller is
243
- * not told of under the user id given (see AssignUserToSpace) is answered as one that does
244
- * not exist, and stays.
257
+ * Removing someone else from a home is guarded as assigning is: within the household, it is a
258
+ * household admin's (household.proto). Anyone may remove themselves, save the last household
259
+ * admin of a home that has other residents ("last_household_admin", household.proto, LAST
260
+ * ADMIN, which also refuses a household admin removing another when that would leave none). A
261
+ * membership the caller is not told of under the user id given (see AssignUserToSpace) is
262
+ * answered as one that does not exist, and stays.
245
263
  *
246
264
  * user_id may be a residency id (access.v1.MembershipRelation, RESIDENCY IDS): it then ends
247
265
  * that residency, if space_id is its home, and answers as for one that does not exist
@@ -274,9 +292,10 @@ export declare const RemoveUserFromSpaceSchema: GenMessage<RemoveUserFromSpace>;
274
292
  *
275
293
  * Into a home go only the building's own devices and devices its residents own, and a
276
294
  * device belongs to one home at most; filing into, out of or beside a home is guarded by
277
- * the gateway. A caller not allowed is refused as NOT_ENTITLED, and filing that would leave
278
- * a link the caller can see across a home's boundary is refused whatever the caller; one
279
- * they cannot see is removed instead.
295
+ * the gateway, and within the household it is a household admin's, save a device a resident
296
+ * owns, which its owner files (household.proto). A caller not allowed is refused as
297
+ * NOT_ENTITLED, and filing that would leave a link the caller can see across a home's
298
+ * boundary is refused whatever the caller; one they cannot see is removed instead.
280
299
  *
281
300
  * @generated from message kusinta.iot.webrtc.v1.PlaceDeviceInSpace
282
301
  */
@@ -997,6 +1016,17 @@ export declare type PrivacyDisclosure = Message<"kusinta.iot.webrtc.v1.PrivacyDi
997
1016
  * @generated from field: bool names_withheld = 7;
998
1017
  */
999
1018
  namesWithheld: boolean;
1019
+
1020
+ /**
1021
+ * Each staff appointment (household.proto, STAFF APPOINTMENT) of a member who lives in this
1022
+ * home now, made during their current residency — the one that began at an appointment
1023
+ * invite's redeem included — oldest first: whoever joins the household later learns who put
1024
+ * its admins there. Given to the home's residents only, and so never to a caller who sees it
1025
+ * as service: a client shows it to residents alone.
1026
+ *
1027
+ * @generated from field: repeated kusinta.iot.webrtc.v1.StaffAppointment staff_appointments = 8;
1028
+ */
1029
+ staffAppointments: StaffAppointment[];
1000
1030
  };
1001
1031
 
1002
1032
  /**
@@ -1391,8 +1421,8 @@ export declare const SetComfortWindowsSchema: GenMessage<SetComfortWindows>;
1391
1421
 
1392
1422
  /**
1393
1423
  * Asks for a nonce to link one home's account at a third-party service
1394
- * (accountlink.v1.AccountLinkNonce). Only a household admin of the home — the resident
1395
- * relation that governs a home's own settings — is issued one; anyone else is refused as
1424
+ * (accountlink.v1.AccountLinkNonce). Only a household admin of the home
1425
+ * (access.v1.MEMBERSHIP_RELATION_HOUSEHOLD_ADMIN) is issued one; anyone else is refused as
1396
1426
  * NOT_ENTITLED, as is a home the caller cannot reach. A service this gateway does not
1397
1427
  * support is refused as INVALID_REQUEST.
1398
1428
  *
@@ -1696,6 +1726,156 @@ export declare type ListHomeSetups = Message<"kusinta.iot.webrtc.v1.ListHomeSetu
1696
1726
  */
1697
1727
  export declare const ListHomeSetupsSchema: GenMessage<ListHomeSetups>;
1698
1728
 
1729
+ /**
1730
+ * Asks for a commissioning grant on one space (commissioning.v1, GRANTS), answered with the
1731
+ * CommissioningGrant, REQUESTED. From a caller holding ROLE_TECHNICIAN who reaches the space;
1732
+ * anyone else, and a space they do not reach, is refused as NOT_ENTITLED. A room in a home is
1733
+ * INVALID_REQUEST with metadata {"reason": "grant_space"}: a home is granted whole. Asking
1734
+ * again while one of the caller's is requested or granted on the space answers that one.
1735
+ *
1736
+ * Accepted on any home the caller reaches, whether or not anyone could answer it: it lapses
1737
+ * unanswered where nobody does, so the answer tells the installer nothing of whether anyone
1738
+ * lives there.
1739
+ *
1740
+ * @generated from message kusinta.iot.webrtc.v1.RequestCommissioningGrant
1741
+ */
1742
+ export declare type RequestCommissioningGrant = Message<"kusinta.iot.webrtc.v1.RequestCommissioningGrant"> & {
1743
+ /**
1744
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1745
+ */
1746
+ spaceId?: SpaceId | undefined;
1747
+ };
1748
+
1749
+ /**
1750
+ * Describes the message kusinta.iot.webrtc.v1.RequestCommissioningGrant.
1751
+ * Use `create(RequestCommissioningGrantSchema)` to create a new message.
1752
+ */
1753
+ export declare const RequestCommissioningGrantSchema: GenMessage<RequestCommissioningGrant>;
1754
+
1755
+ /**
1756
+ * Answers a requested commissioning grant, answered with the CommissioningGrant as stored when
1757
+ * granted, and with ManagementAck when declined, which ends it. From a household admin of the
1758
+ * home, or for a space outside homes the property owner or a gateway administrator who reaches
1759
+ * it; anyone else, and a grant_id that is not requested on a space the caller may answer for,
1760
+ * is refused as NOT_ENTITLED, so that no grant id can be probed.
1761
+ *
1762
+ * Granting needs ends_at after starts_at, no more than 14 days after it, and starts_at no
1763
+ * later than 30 days from now; otherwise INVALID_REQUEST with metadata
1764
+ * {"reason": "grant_period"}. An answered grant is not answered again: to change its time,
1765
+ * end it and let the installer ask anew.
1766
+ *
1767
+ * @generated from message kusinta.iot.webrtc.v1.AnswerCommissioningGrant
1768
+ */
1769
+ export declare type AnswerCommissioningGrant = Message<"kusinta.iot.webrtc.v1.AnswerCommissioningGrant"> & {
1770
+ /**
1771
+ * @generated from field: string grant_id = 1;
1772
+ */
1773
+ grantId: string;
1774
+
1775
+ /**
1776
+ * true grants; false declines.
1777
+ *
1778
+ * @generated from field: bool accept = 2;
1779
+ */
1780
+ accept: boolean;
1781
+
1782
+ /**
1783
+ * When it is active. Unset starts_at: now. Ignored when declining.
1784
+ *
1785
+ * @generated from field: google.protobuf.Timestamp starts_at = 3;
1786
+ */
1787
+ startsAt?: Timestamp | undefined;
1788
+
1789
+ /**
1790
+ * @generated from field: google.protobuf.Timestamp ends_at = 4;
1791
+ */
1792
+ endsAt?: Timestamp | undefined;
1793
+ };
1794
+
1795
+ /**
1796
+ * Describes the message kusinta.iot.webrtc.v1.AnswerCommissioningGrant.
1797
+ * Use `create(AnswerCommissioningGrantSchema)` to create a new message.
1798
+ */
1799
+ export declare const AnswerCommissioningGrantSchema: GenMessage<AnswerCommissioningGrant>;
1800
+
1801
+ /**
1802
+ * Ends a commissioning grant at once, requested or granted. Answered with ManagementAck. From
1803
+ * the installer it names, from whoever may answer it, and from nobody else: anyone else, and a
1804
+ * grant_id they are not listed, is refused as NOT_ENTITLED.
1805
+ *
1806
+ * @generated from message kusinta.iot.webrtc.v1.EndCommissioningGrant
1807
+ */
1808
+ export declare type EndCommissioningGrant = Message<"kusinta.iot.webrtc.v1.EndCommissioningGrant"> & {
1809
+ /**
1810
+ * @generated from field: string grant_id = 1;
1811
+ */
1812
+ grantId: string;
1813
+ };
1814
+
1815
+ /**
1816
+ * Describes the message kusinta.iot.webrtc.v1.EndCommissioningGrant.
1817
+ * Use `create(EndCommissioningGrantSchema)` to create a new message.
1818
+ */
1819
+ export declare const EndCommissioningGrantSchema: GenMessage<EndCommissioningGrant>;
1820
+
1821
+ /**
1822
+ * Lists the commissioning grants that have not ended on a space and those below it, answered
1823
+ * with CommissioningGrants: a home's to its residents; one on a space outside homes to the
1824
+ * property owner and the gateway administrators who reach it; to an installer, their own.
1825
+ * Unset root_space_id lists every one the caller may be listed. Anyone may ask; nobody is
1826
+ * refused, and a caller listed none gets none.
1827
+ *
1828
+ * @generated from message kusinta.iot.webrtc.v1.ListCommissioningGrants
1829
+ */
1830
+ export declare type ListCommissioningGrants = Message<"kusinta.iot.webrtc.v1.ListCommissioningGrants"> & {
1831
+ /**
1832
+ * @generated from field: kusinta.iot.identity.v1.SpaceId root_space_id = 1;
1833
+ */
1834
+ rootSpaceId?: SpaceId | undefined;
1835
+ };
1836
+
1837
+ /**
1838
+ * Describes the message kusinta.iot.webrtc.v1.ListCommissioningGrants.
1839
+ * Use `create(ListCommissioningGrantsSchema)` to create a new message.
1840
+ */
1841
+ export declare const ListCommissioningGrantsSchema: GenMessage<ListCommissioningGrants>;
1842
+
1843
+ /**
1844
+ * Sets who owns one of the building's own devices as an asset (common.v1.AssetOwner), and
1845
+ * with it nobody's access. Answered with ManagementAck. From the property owner or a gateway
1846
+ * administrator who reaches the device; anyone else is refused as NOT_ENTITLED. Unset
1847
+ * asset_owner clears it, as does one with neither owner set.
1848
+ *
1849
+ * Refused as INVALID_REQUEST with metadata "reason":
1850
+ * "owned_by_resident" a device a person owns outright (common.v1.DeviceOwnershipType
1851
+ * RESIDENT), which has no asset owner.
1852
+ * "asset_owner" owner_organisation false, or a household_home_id that is not an
1853
+ * apartment.
1854
+ *
1855
+ * A household's asset keeps naming its home if the home's space is changed or deleted, until
1856
+ * it is set again: who owns what after a home is split or merged is decided here, not by the
1857
+ * change.
1858
+ *
1859
+ * @generated from message kusinta.iot.webrtc.v1.SetAssetOwner
1860
+ */
1861
+ export declare type SetAssetOwner = Message<"kusinta.iot.webrtc.v1.SetAssetOwner"> & {
1862
+ /**
1863
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
1864
+ */
1865
+ deviceId?: DeviceId | undefined;
1866
+
1867
+ /**
1868
+ * @generated from field: kusinta.iot.common.v1.AssetOwner asset_owner = 2;
1869
+ */
1870
+ assetOwner?: AssetOwner | undefined;
1871
+ };
1872
+
1873
+ /**
1874
+ * Describes the message kusinta.iot.webrtc.v1.SetAssetOwner.
1875
+ * Use `create(SetAssetOwnerSchema)` to create a new message.
1876
+ */
1877
+ export declare const SetAssetOwnerSchema: GenMessage<SetAssetOwner>;
1878
+
1699
1879
  /**
1700
1880
  * @generated from message kusinta.iot.webrtc.v1.ManagementRequest
1701
1881
  */
@@ -2052,6 +2232,82 @@ export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.Managemen
2052
2232
  */
2053
2233
  value: ListHomeSetups;
2054
2234
  case: "listHomeSetups";
2235
+ } | {
2236
+ /**
2237
+ * Commissioning grants; see commissioning.v1, GRANTS.
2238
+ *
2239
+ * @generated from field: kusinta.iot.webrtc.v1.RequestCommissioningGrant request_commissioning_grant = 57;
2240
+ */
2241
+ value: RequestCommissioningGrant;
2242
+ case: "requestCommissioningGrant";
2243
+ } | {
2244
+ /**
2245
+ * @generated from field: kusinta.iot.webrtc.v1.AnswerCommissioningGrant answer_commissioning_grant = 58;
2246
+ */
2247
+ value: AnswerCommissioningGrant;
2248
+ case: "answerCommissioningGrant";
2249
+ } | {
2250
+ /**
2251
+ * @generated from field: kusinta.iot.webrtc.v1.EndCommissioningGrant end_commissioning_grant = 59;
2252
+ */
2253
+ value: EndCommissioningGrant;
2254
+ case: "endCommissioningGrant";
2255
+ } | {
2256
+ /**
2257
+ * @generated from field: kusinta.iot.webrtc.v1.ListCommissioningGrants list_commissioning_grants = 60;
2258
+ */
2259
+ value: ListCommissioningGrants;
2260
+ case: "listCommissioningGrants";
2261
+ } | {
2262
+ /**
2263
+ * @generated from field: kusinta.iot.webrtc.v1.SetAssetOwner set_asset_owner = 61;
2264
+ */
2265
+ value: SetAssetOwner;
2266
+ case: "setAssetOwner";
2267
+ } | {
2268
+ /**
2269
+ * The household; see household.proto.
2270
+ *
2271
+ * @generated from field: kusinta.iot.webrtc.v1.DemoteHouseholdAdmin demote_household_admin = 62;
2272
+ */
2273
+ value: DemoteHouseholdAdmin;
2274
+ case: "demoteHouseholdAdmin";
2275
+ } | {
2276
+ /**
2277
+ * @generated from field: kusinta.iot.webrtc.v1.StartHouseholdHandover start_household_handover = 63;
2278
+ */
2279
+ value: StartHouseholdHandover;
2280
+ case: "startHouseholdHandover";
2281
+ } | {
2282
+ /**
2283
+ * @generated from field: kusinta.iot.webrtc.v1.ConfirmHouseholdHandover confirm_household_handover = 64;
2284
+ */
2285
+ value: ConfirmHouseholdHandover;
2286
+ case: "confirmHouseholdHandover";
2287
+ } | {
2288
+ /**
2289
+ * @generated from field: kusinta.iot.webrtc.v1.CancelHouseholdHandover cancel_household_handover = 65;
2290
+ */
2291
+ value: CancelHouseholdHandover;
2292
+ case: "cancelHouseholdHandover";
2293
+ } | {
2294
+ /**
2295
+ * @generated from field: kusinta.iot.webrtc.v1.ListHouseholdHandovers list_household_handovers = 66;
2296
+ */
2297
+ value: ListHouseholdHandovers;
2298
+ case: "listHouseholdHandovers";
2299
+ } | {
2300
+ /**
2301
+ * @generated from field: kusinta.iot.webrtc.v1.ExportHouseholdData export_household_data = 67;
2302
+ */
2303
+ value: ExportHouseholdData;
2304
+ case: "exportHouseholdData";
2305
+ } | {
2306
+ /**
2307
+ * @generated from field: kusinta.iot.webrtc.v1.SetHomeName set_home_name = 68;
2308
+ */
2309
+ value: SetHomeName;
2310
+ case: "setHomeName";
2055
2311
  } | { case: undefined; value?: undefined };
2056
2312
  };
2057
2313
 
@@ -15,6 +15,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
15
15
  import { file_kusinta_iot_link_v1_link } from "../../link/v1/link_pb.js";
16
16
  import { file_kusinta_iot_space_v1_space } from "../../space/v1/space_pb.js";
17
17
  import { file_kusinta_iot_vendor_lorawan_v1_lorawan } from "../../vendor/lorawan/v1/lorawan_pb.js";
18
+ import { file_kusinta_iot_webrtc_v1_household } from "./household_pb.js";
18
19
  import { file_kusinta_iot_webrtc_v1_invite } from "./invite_pb.js";
19
20
  import { file_kusinta_iot_webrtc_v1_members } from "./members_pb.js";
20
21
 
@@ -22,7 +23,7 @@ import { file_kusinta_iot_webrtc_v1_members } from "./members_pb.js";
22
23
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
23
24
  */
24
25
  export const file_kusinta_iot_webrtc_v1_management = /*@__PURE__*/
25
- fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgivAEKEUFzc2lnblVzZXJUb1NwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjsKCHJlbGF0aW9uGAQgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbkoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkInwKDVNldFJvb21UYXJnZXQSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgCIAEoEUgAiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIkQKC1Jvb21TZW5zb3JzEjUKCnNlbnNvcl9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ0CgpSb29tTGltaXRzEh0KEG1pbl9jZW50aWRlZ3JlZXMYASABKBFIAIgBARIdChBtYXhfY2VudGlkZWdyZWVzGAIgASgRSAGIAQFCEwoRX21pbl9jZW50aWRlZ3JlZXNCEwoRX21heF9jZW50aWRlZ3JlZXMi7QEKFENvbmZpZ3VyZVJvb21DbGltYXRlEjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjEKBmxpbWl0cxgCIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tTGltaXRzEjMKB3NlbnNvcnMYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbVNlbnNvcnMSIQoUbG9ja19kZXZpY2VfY29udHJvbHMYBCABKAhIAIgBAUIXChVfbG9ja19kZXZpY2VfY29udHJvbHMikwIKDlNldENsaW1hdGVNb2RlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI1CgRraW5kGAIgASgOMicua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlTW9kZUtpbmQSIQoUc2V0YmFja19jZW50aWRlZ3JlZXMYAyABKBFIAIgBARItCglzdGFydHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlcyJLChBMaXN0Um9vbUNsaW1hdGVzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIp8BCg5HZXRSb29tSGlzdG9yeRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBItCglmcm9tX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpICChFQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoPc2VydmljZV9wYXJ0aWVzGAUgAygLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VQYXJ0eRJMChZjbGltYXRlX3N1bW1hcnlfcGVyaW9kGAQgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBIfChdvd25lcl9vcmdhbmlzYXRpb25fbmFtZRgGIAEoCRIWCg5uYW1lc193aXRoaGVsZBgHIAEoCEoECAIQBCJ/CgxTZXJ2aWNlUGFydHkSKQoEcm9sZRgBIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKB3NpZ25hbHMYAiADKA4yJC5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuU2VydmljZVNpZ25hbBINCgVuYW1lcxgDIAMoCSJKChRHZXRQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi7gEKGkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBItCglmcm9tX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKElJlY29ubmVjdENvbm5lY3RvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZCJGCgtMaXN0SGVhdGluZxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCJGCg9QdXRIZWF0aW5nUGxhbnQSMwoFcGxhbnQYASABKAsyJC5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkhlYXRpbmdQbGFudCJMChFQdXRIZWF0aW5nQ2lyY3VpdBI3CgdjaXJjdWl0GAEgASgLMiYua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nQ2lyY3VpdCI/CgxQdXRGbG9vclpvbmUSLwoEem9uZRgBIAEoCzIhLmt1c2ludGEuaW90LmhlYXRpbmcudjEuRmxvb3Jab25lIksKDlB1dENvbWZvcnRMb2FkEjkKDGNvbWZvcnRfbG9hZBgBIAEoCzIjLmt1c2ludGEuaW90LmhlYXRpbmcudjEuQ29tZm9ydExvYWQiMwoTUmVtb3ZlSGVhdGluZ1JlY29yZBIKCgJpZBgBIAEoCRIQCghyZXZpc2lvbhgCIAEoBCKYAQoRU2V0Q29tZm9ydFdpbmRvd3MSFwoPY29tZm9ydF9sb2FkX2lkGAEgASgJEjYKB3dpbmRvd3MYAiADKAsyJS5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkNvbWZvcnRXaW5kb3cSHQoQd2luZG93c19yZXZpc2lvbhgDIAEoBEgAiAEBQhMKEV93aW5kb3dzX3JldmlzaW9uIogBChdSZXF1ZXN0QWNjb3VudExpbmtOb25jZRIxCgdob21lX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI6CgdzZXJ2aWNlGAIgASgOMikua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuTGlua2VkU2VydmljZSJFChBMaXN0QWNjb3VudExpbmtzEjEKB2hvbWVfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIn4KDVVubGlua0FjY291bnQSMQoHaG9tZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSOgoHc2VydmljZRgCIAEoDjIpLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkxpbmtlZFNlcnZpY2UiRwoRTGlzdENvbW1pc3Npb25pbmcSMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIlUKFFB1dENvbW1pc3Npb25pbmdGYWN0Ej0KBGZhY3QYASABKAsyLy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkNvbW1pc3Npb25pbmdGYWN0IjwKF1JlbW92ZUNvbW1pc3Npb25pbmdGYWN0Eg8KB2ZhY3RfaWQYASABKAkSEAoIcmV2aXNpb24YAiABKAQiUQoQUHV0SG91c2VUZW1wbGF0ZRI9Cgh0ZW1wbGF0ZRgBIAEoCzIrLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuSG91c2VUZW1wbGF0ZSJZCg9TZXRIb21lVGVtcGxhdGUSMQoHaG9tZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSEwoLdGVtcGxhdGVfaWQYAiABKAkinwEKFFJ1bkNvbW1pc3Npb25pbmdUZXN0EjQKBGtpbmQYASABKA4yJi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RLaW5kEjkKB2JpbmRpbmcYBCABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWZKBAgCEARSCXJlY29yZF9pZFIFZmllbGQiZgoZQ29uY2x1ZGVDb21taXNzaW9uaW5nVGVzdBIPCgd0ZXN0X2lkGAEgASgJEjgKB3ZlcmRpY3QYAiABKA4yJy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RTdGF0ZSJJCg5MaXN0SG9tZVNldHVwcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCK1HwoRTWFuYWdlbWVudFJlcXVlc3QSOgoMY3JlYXRlX3NwYWNlGAEgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZVNwYWNlSAASOgoMdXBkYXRlX3NwYWNlGAIgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLlVwZGF0ZVNwYWNlSAASOgoMZGVsZXRlX3NwYWNlGAMgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkRlbGV0ZVNwYWNlSAASSAoUYXNzaWduX3VzZXJfdG9fc3BhY2UYBCABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXNzaWduVXNlclRvU3BhY2VIABJMChZyZW1vdmVfdXNlcl9mcm9tX3NwYWNlGAUgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZVVzZXJGcm9tU3BhY2VIABJKChVwbGFjZV9kZXZpY2VfaW5fc3BhY2UYBiABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGxhY2VEZXZpY2VJblNwYWNlSAASUAoYcmVtb3ZlX2RldmljZV9mcm9tX3NwYWNlGAcgASgLMiwua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZURldmljZUZyb21TcGFjZUgAEjoKDGNsYWltX2RldmljZRgIIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DbGFpbURldmljZUgAEj4KDnJlbGVhc2VfZGV2aWNlGAkgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbGVhc2VEZXZpY2VIABI4CgtsaXN0X3NwYWNlcxgKIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0U3BhY2VzSAASRQoSY3JlYXRlX2RldmljZV9saW5rGAsgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZURldmljZUxpbmtIABJFChJyZW1vdmVfZGV2aWNlX2xpbmsYDCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlTGlua0gAEkMKEWxpc3RfZGV2aWNlX2xpbmtzGA0gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3REZXZpY2VMaW5rc0gAEkUKEnVwZGF0ZV9kZXZpY2VfbGluaxgOIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5VcGRhdGVEZXZpY2VMaW5rSAASQgoQcHJvdmlzaW9uX2RldmljZRgPIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm92aXNpb25EZXZpY2VIABI/Cg9zZXRfcm9vbV90YXJnZXQYECABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Um9vbVRhcmdldEgAEk0KFmNvbmZpZ3VyZV9yb29tX2NsaW1hdGUYESABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29uZmlndXJlUm9vbUNsaW1hdGVIABJBChBzZXRfY2xpbWF0ZV9tb2RlGBIgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldENsaW1hdGVNb2RlSAASRQoSbGlzdF9yb29tX2NsaW1hdGVzGBMgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RSb29tQ2xpbWF0ZXNIABJBChBnZXRfcm9vbV9oaXN0b3J5GBQgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldFJvb21IaXN0b3J5SAASTQoWZ2V0X3ByaXZhY3lfZGlzY2xvc3VyZRgVIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HZXRQcml2YWN5RGlzY2xvc3VyZUgAEloKHWdldF9hcGFydG1lbnRfY2xpbWF0ZV9zdW1tYXJ5GBYgASgLMjEua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASSAoTcmVjb25uZWN0X2Nvbm5lY3RvchgXIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZWNvbm5lY3RDb25uZWN0b3JIABI8Cg1jcmVhdGVfaW52aXRlGBggASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZUludml0ZUgAEjwKDXJlc2VuZF9pbnZpdGUYGSABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVzZW5kSW52aXRlSAASPAoNcmV2b2tlX2ludml0ZRgaIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZXZva2VJbnZpdGVIABJMChZtYXJrX2ludml0ZV9lbWFpbF9zZW50GBsgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLk1hcmtJbnZpdGVFbWFpbFNlbnRIABJFChJsaXN0X3NwYWNlX2ludml0ZXMYHCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFNwYWNlSW52aXRlc0gAEkkKFGFwcHJvdmVfam9pbl9yZXF1ZXN0GB0gASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkFwcHJvdmVKb2luUmVxdWVzdEgAEkMKEWRlbnlfam9pbl9yZXF1ZXN0GB4gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkRlbnlKb2luUmVxdWVzdEgAEkkKFGxpc3RfZ2F0ZXdheV9tZW1iZXJzGB8gASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RHYXRld2F5TWVtYmVyc0gAEj8KD3NldF9tZW1iZXJfcm9sZRggIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRNZW1iZXJSb2xlSAASRwoTcmVtb3ZlX2Zyb21fZ2F0ZXdheRghIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVGcm9tR2F0ZXdheUgAEkEKEHNldF9hY2Nlc3NfdW50aWwYIiABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0QWNjZXNzVW50aWxIABJRChZzZXRfb3duZXJfb3JnYW5pc2F0aW9uGCMgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldE93bmVyT3JnYW5pc2F0aW9uQgIYAUgAEkQKEXJlcXVlc3RfcHJvbW90aW9uGCQgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlcXVlc3RQcm9tb3Rpb25IABJCChBhbnN3ZXJfcHJvbW90aW9uGCUgASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkFuc3dlclByb21vdGlvbkgAEk8KF2xpc3RfcHJvbW90aW9uX3JlcXVlc3RzGCYgASgLMiwua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RQcm9tb3Rpb25SZXF1ZXN0c0gAEjoKDGxpc3RfaGVhdGluZxgnIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0SGVhdGluZ0gAEkMKEXB1dF9oZWF0aW5nX3BsYW50GCggASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlB1dEhlYXRpbmdQbGFudEgAEkcKE3B1dF9oZWF0aW5nX2NpcmN1aXQYKSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHV0SGVhdGluZ0NpcmN1aXRIABI9Cg5wdXRfZmxvb3Jfem9uZRgqIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QdXRGbG9vclpvbmVIABJBChBwdXRfY29tZm9ydF9sb2FkGCsgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlB1dENvbWZvcnRMb2FkSAASSwoVcmVtb3ZlX2hlYXRpbmdfcmVjb3JkGCwgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZUhlYXRpbmdSZWNvcmRIABJHChNzZXRfY29tZm9ydF93aW5kb3dzGC0gASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldENvbWZvcnRXaW5kb3dzSAASVAoacmVxdWVzdF9hY2NvdW50X2xpbmtfbm9uY2UYLiABKAsyLi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVxdWVzdEFjY291bnRMaW5rTm9uY2VIABJFChJsaXN0X2FjY291bnRfbGlua3MYLyABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdEFjY291bnRMaW5rc0gAEj4KDnVubGlua19hY2NvdW50GDAgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlVubGlua0FjY291bnRIABJGChJsaXN0X2NvbW1pc3Npb25pbmcYMSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdENvbW1pc3Npb25pbmdIABJNChZwdXRfY29tbWlzc2lvbmluZ19mYWN0GDIgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLlB1dENvbW1pc3Npb25pbmdGYWN0SAASUwoZcmVtb3ZlX2NvbW1pc3Npb25pbmdfZmFjdBgzIAEoCzIuLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVDb21taXNzaW9uaW5nRmFjdEgAEkUKEnB1dF9ob3VzZV90ZW1wbGF0ZRg0IAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QdXRIb3VzZVRlbXBsYXRlSAASQwoRc2V0X2hvbWVfdGVtcGxhdGUYNSABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0SG9tZVRlbXBsYXRlSAASTQoWcnVuX2NvbW1pc3Npb25pbmdfdGVzdBg2IAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SdW5Db21taXNzaW9uaW5nVGVzdEgAElcKG2NvbmNsdWRlX2NvbW1pc3Npb25pbmdfdGVzdBg3IAEoCzIwLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25jbHVkZUNvbW1pc3Npb25pbmdUZXN0SAASQQoQbGlzdF9ob21lX3NldHVwcxg4IAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0SG9tZVNldHVwc0gAQgkKB3JlcXVlc3RCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_access_v1_roles, file_kusinta_iot_accountlink_v1_account_link, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_commissioning_v1_commissioning, file_kusinta_iot_common_v1_types, file_kusinta_iot_heating_v1_heating, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_members]);
26
+ fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgivAEKEUFzc2lnblVzZXJUb1NwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjsKCHJlbGF0aW9uGAQgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbkoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkInwKDVNldFJvb21UYXJnZXQSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgCIAEoEUgAiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIkQKC1Jvb21TZW5zb3JzEjUKCnNlbnNvcl9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ0CgpSb29tTGltaXRzEh0KEG1pbl9jZW50aWRlZ3JlZXMYASABKBFIAIgBARIdChBtYXhfY2VudGlkZWdyZWVzGAIgASgRSAGIAQFCEwoRX21pbl9jZW50aWRlZ3JlZXNCEwoRX21heF9jZW50aWRlZ3JlZXMi7QEKFENvbmZpZ3VyZVJvb21DbGltYXRlEjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjEKBmxpbWl0cxgCIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tTGltaXRzEjMKB3NlbnNvcnMYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbVNlbnNvcnMSIQoUbG9ja19kZXZpY2VfY29udHJvbHMYBCABKAhIAIgBAUIXChVfbG9ja19kZXZpY2VfY29udHJvbHMikwIKDlNldENsaW1hdGVNb2RlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI1CgRraW5kGAIgASgOMicua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlTW9kZUtpbmQSIQoUc2V0YmFja19jZW50aWRlZ3JlZXMYAyABKBFIAIgBARItCglzdGFydHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlcyJLChBMaXN0Um9vbUNsaW1hdGVzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIp8BCg5HZXRSb29tSGlzdG9yeRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBItCglmcm9tX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wItcCChFQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoPc2VydmljZV9wYXJ0aWVzGAUgAygLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VQYXJ0eRJMChZjbGltYXRlX3N1bW1hcnlfcGVyaW9kGAQgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBIfChdvd25lcl9vcmdhbmlzYXRpb25fbmFtZRgGIAEoCRIWCg5uYW1lc193aXRoaGVsZBgHIAEoCBJDChJzdGFmZl9hcHBvaW50bWVudHMYCCADKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3RhZmZBcHBvaW50bWVudEoECAIQBCJ/CgxTZXJ2aWNlUGFydHkSKQoEcm9sZRgBIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKB3NpZ25hbHMYAiADKA4yJC5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuU2VydmljZVNpZ25hbBINCgVuYW1lcxgDIAMoCSJKChRHZXRQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi7gEKGkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBItCglmcm9tX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKElJlY29ubmVjdENvbm5lY3RvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZCJGCgtMaXN0SGVhdGluZxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCJGCg9QdXRIZWF0aW5nUGxhbnQSMwoFcGxhbnQYASABKAsyJC5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkhlYXRpbmdQbGFudCJMChFQdXRIZWF0aW5nQ2lyY3VpdBI3CgdjaXJjdWl0GAEgASgLMiYua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nQ2lyY3VpdCI/CgxQdXRGbG9vclpvbmUSLwoEem9uZRgBIAEoCzIhLmt1c2ludGEuaW90LmhlYXRpbmcudjEuRmxvb3Jab25lIksKDlB1dENvbWZvcnRMb2FkEjkKDGNvbWZvcnRfbG9hZBgBIAEoCzIjLmt1c2ludGEuaW90LmhlYXRpbmcudjEuQ29tZm9ydExvYWQiMwoTUmVtb3ZlSGVhdGluZ1JlY29yZBIKCgJpZBgBIAEoCRIQCghyZXZpc2lvbhgCIAEoBCKYAQoRU2V0Q29tZm9ydFdpbmRvd3MSFwoPY29tZm9ydF9sb2FkX2lkGAEgASgJEjYKB3dpbmRvd3MYAiADKAsyJS5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkNvbWZvcnRXaW5kb3cSHQoQd2luZG93c19yZXZpc2lvbhgDIAEoBEgAiAEBQhMKEV93aW5kb3dzX3JldmlzaW9uIogBChdSZXF1ZXN0QWNjb3VudExpbmtOb25jZRIxCgdob21lX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI6CgdzZXJ2aWNlGAIgASgOMikua3VzaW50YS5pb3QuYWNjb3VudGxpbmsudjEuTGlua2VkU2VydmljZSJFChBMaXN0QWNjb3VudExpbmtzEjEKB2hvbWVfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIn4KDVVubGlua0FjY291bnQSMQoHaG9tZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSOgoHc2VydmljZRgCIAEoDjIpLmt1c2ludGEuaW90LmFjY291bnRsaW5rLnYxLkxpbmtlZFNlcnZpY2UiRwoRTGlzdENvbW1pc3Npb25pbmcSMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIlUKFFB1dENvbW1pc3Npb25pbmdGYWN0Ej0KBGZhY3QYASABKAsyLy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkNvbW1pc3Npb25pbmdGYWN0IjwKF1JlbW92ZUNvbW1pc3Npb25pbmdGYWN0Eg8KB2ZhY3RfaWQYASABKAkSEAoIcmV2aXNpb24YAiABKAQiUQoQUHV0SG91c2VUZW1wbGF0ZRI9Cgh0ZW1wbGF0ZRgBIAEoCzIrLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuSG91c2VUZW1wbGF0ZSJZCg9TZXRIb21lVGVtcGxhdGUSMQoHaG9tZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSEwoLdGVtcGxhdGVfaWQYAiABKAkinwEKFFJ1bkNvbW1pc3Npb25pbmdUZXN0EjQKBGtpbmQYASABKA4yJi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RLaW5kEjkKB2JpbmRpbmcYBCABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWZKBAgCEARSCXJlY29yZF9pZFIFZmllbGQiZgoZQ29uY2x1ZGVDb21taXNzaW9uaW5nVGVzdBIPCgd0ZXN0X2lkGAEgASgJEjgKB3ZlcmRpY3QYAiABKA4yJy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RTdGF0ZSJJCg5MaXN0SG9tZVNldHVwcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCJPChlSZXF1ZXN0Q29tbWlzc2lvbmluZ0dyYW50EjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCKYAQoYQW5zd2VyQ29tbWlzc2lvbmluZ0dyYW50EhAKCGdyYW50X2lkGAEgASgJEg4KBmFjY2VwdBgCIAEoCBItCglzdGFydHNfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIikKFUVuZENvbW1pc3Npb25pbmdHcmFudBIQCghncmFudF9pZBgBIAEoCSJSChdMaXN0Q29tbWlzc2lvbmluZ0dyYW50cxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCJ9Cg1TZXRBc3NldE93bmVyEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjYKC2Fzc2V0X293bmVyGAIgASgLMiEua3VzaW50YS5pb3QuY29tbW9uLnYxLkFzc2V0T3duZXIi9yYKEU1hbmFnZW1lbnRSZXF1ZXN0EjoKDGNyZWF0ZV9zcGFjZRgBIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DcmVhdGVTcGFjZUgAEjoKDHVwZGF0ZV9zcGFjZRgCIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5VcGRhdGVTcGFjZUgAEjoKDGRlbGV0ZV9zcGFjZRgDIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZWxldGVTcGFjZUgAEkgKFGFzc2lnbl91c2VyX3RvX3NwYWNlGAQgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLkFzc2lnblVzZXJUb1NwYWNlSAASTAoWcmVtb3ZlX3VzZXJfZnJvbV9zcGFjZRgFIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVVc2VyRnJvbVNwYWNlSAASSgoVcGxhY2VfZGV2aWNlX2luX3NwYWNlGAYgASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLlBsYWNlRGV2aWNlSW5TcGFjZUgAElAKGHJlbW92ZV9kZXZpY2VfZnJvbV9zcGFjZRgHIAEoCzIsLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVEZXZpY2VGcm9tU3BhY2VIABI6CgxjbGFpbV9kZXZpY2UYCCABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ2xhaW1EZXZpY2VIABI+Cg5yZWxlYXNlX2RldmljZRgJIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZWxlYXNlRGV2aWNlSAASOAoLbGlzdF9zcGFjZXMYCiABKAsyIS5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFNwYWNlc0gAEkUKEmNyZWF0ZV9kZXZpY2VfbGluaxgLIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DcmVhdGVEZXZpY2VMaW5rSAASRQoScmVtb3ZlX2RldmljZV9saW5rGAwgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZURldmljZUxpbmtIABJDChFsaXN0X2RldmljZV9saW5rcxgNIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0RGV2aWNlTGlua3NIABJFChJ1cGRhdGVfZGV2aWNlX2xpbmsYDiABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuVXBkYXRlRGV2aWNlTGlua0gAEkIKEHByb3Zpc2lvbl9kZXZpY2UYDyABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvdmlzaW9uRGV2aWNlSAASPwoPc2V0X3Jvb21fdGFyZ2V0GBAgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldFJvb21UYXJnZXRIABJNChZjb25maWd1cmVfcm9vbV9jbGltYXRlGBEgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbmZpZ3VyZVJvb21DbGltYXRlSAASQQoQc2V0X2NsaW1hdGVfbW9kZRgSIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRDbGltYXRlTW9kZUgAEkUKEmxpc3Rfcm9vbV9jbGltYXRlcxgTIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0Um9vbUNsaW1hdGVzSAASQQoQZ2V0X3Jvb21faGlzdG9yeRgUIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HZXRSb29tSGlzdG9yeUgAEk0KFmdldF9wcml2YWN5X2Rpc2Nsb3N1cmUYFSABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2V0UHJpdmFjeURpc2Nsb3N1cmVIABJaCh1nZXRfYXBhcnRtZW50X2NsaW1hdGVfc3VtbWFyeRgWIAEoCzIxLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HZXRBcGFydG1lbnRDbGltYXRlU3VtbWFyeUgAEkgKE3JlY29ubmVjdF9jb25uZWN0b3IYFyABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVjb25uZWN0Q29ubmVjdG9ySAASPAoNY3JlYXRlX2ludml0ZRgYIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DcmVhdGVJbnZpdGVIABI8Cg1yZXNlbmRfaW52aXRlGBkgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlc2VuZEludml0ZUgAEjwKDXJldm9rZV9pbnZpdGUYGiABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmV2b2tlSW52aXRlSAASTAoWbWFya19pbnZpdGVfZW1haWxfc2VudBgbIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYXJrSW52aXRlRW1haWxTZW50SAASRQoSbGlzdF9zcGFjZV9pbnZpdGVzGBwgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RTcGFjZUludml0ZXNIABJJChRhcHByb3ZlX2pvaW5fcmVxdWVzdBgdIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BcHByb3ZlSm9pblJlcXVlc3RIABJDChFkZW55X2pvaW5fcmVxdWVzdBgeIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZW55Sm9pblJlcXVlc3RIABJJChRsaXN0X2dhdGV3YXlfbWVtYmVycxgfIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0R2F0ZXdheU1lbWJlcnNIABI/Cg9zZXRfbWVtYmVyX3JvbGUYICABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0TWVtYmVyUm9sZUgAEkcKE3JlbW92ZV9mcm9tX2dhdGV3YXkYISABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRnJvbUdhdGV3YXlIABJBChBzZXRfYWNjZXNzX3VudGlsGCIgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldEFjY2Vzc1VudGlsSAASUQoWc2V0X293bmVyX29yZ2FuaXNhdGlvbhgjIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRPd25lck9yZ2FuaXNhdGlvbkICGAFIABJEChFyZXF1ZXN0X3Byb21vdGlvbhgkIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZXF1ZXN0UHJvbW90aW9uSAASQgoQYW5zd2VyX3Byb21vdGlvbhglIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BbnN3ZXJQcm9tb3Rpb25IABJPChdsaXN0X3Byb21vdGlvbl9yZXF1ZXN0cxgmIAEoCzIsLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0UHJvbW90aW9uUmVxdWVzdHNIABI6CgxsaXN0X2hlYXRpbmcYJyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdEhlYXRpbmdIABJDChFwdXRfaGVhdGluZ19wbGFudBgoIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QdXRIZWF0aW5nUGxhbnRIABJHChNwdXRfaGVhdGluZ19jaXJjdWl0GCkgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLlB1dEhlYXRpbmdDaXJjdWl0SAASPQoOcHV0X2Zsb29yX3pvbmUYKiABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHV0Rmxvb3Jab25lSAASQQoQcHV0X2NvbWZvcnRfbG9hZBgrIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QdXRDb21mb3J0TG9hZEgAEksKFXJlbW92ZV9oZWF0aW5nX3JlY29yZBgsIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVIZWF0aW5nUmVjb3JkSAASRwoTc2V0X2NvbWZvcnRfd2luZG93cxgtIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRDb21mb3J0V2luZG93c0gAElQKGnJlcXVlc3RfYWNjb3VudF9saW5rX25vbmNlGC4gASgLMi4ua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlcXVlc3RBY2NvdW50TGlua05vbmNlSAASRQoSbGlzdF9hY2NvdW50X2xpbmtzGC8gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RBY2NvdW50TGlua3NIABI+Cg51bmxpbmtfYWNjb3VudBgwIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5VbmxpbmtBY2NvdW50SAASRgoSbGlzdF9jb21taXNzaW9uaW5nGDEgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RDb21taXNzaW9uaW5nSAASTQoWcHV0X2NvbW1pc3Npb25pbmdfZmFjdBgyIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QdXRDb21taXNzaW9uaW5nRmFjdEgAElMKGXJlbW92ZV9jb21taXNzaW9uaW5nX2ZhY3QYMyABKAsyLi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlQ29tbWlzc2lvbmluZ0ZhY3RIABJFChJwdXRfaG91c2VfdGVtcGxhdGUYNCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHV0SG91c2VUZW1wbGF0ZUgAEkMKEXNldF9ob21lX3RlbXBsYXRlGDUgASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldEhvbWVUZW1wbGF0ZUgAEk0KFnJ1bl9jb21taXNzaW9uaW5nX3Rlc3QYNiABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUnVuQ29tbWlzc2lvbmluZ1Rlc3RIABJXChtjb25jbHVkZV9jb21taXNzaW9uaW5nX3Rlc3QYNyABKAsyMC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29uY2x1ZGVDb21taXNzaW9uaW5nVGVzdEgAEkEKEGxpc3RfaG9tZV9zZXR1cHMYOCABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdEhvbWVTZXR1cHNIABJXChtyZXF1ZXN0X2NvbW1pc3Npb25pbmdfZ3JhbnQYOSABKAsyMC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVxdWVzdENvbW1pc3Npb25pbmdHcmFudEgAElUKGmFuc3dlcl9jb21taXNzaW9uaW5nX2dyYW50GDogASgLMi8ua3VzaW50YS5pb3Qud2VicnRjLnYxLkFuc3dlckNvbW1pc3Npb25pbmdHcmFudEgAEk8KF2VuZF9jb21taXNzaW9uaW5nX2dyYW50GDsgASgLMiwua3VzaW50YS5pb3Qud2VicnRjLnYxLkVuZENvbW1pc3Npb25pbmdHcmFudEgAElMKGWxpc3RfY29tbWlzc2lvbmluZ19ncmFudHMYPCABKAsyLi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdENvbW1pc3Npb25pbmdHcmFudHNIABI/Cg9zZXRfYXNzZXRfb3duZXIYPSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0QXNzZXRPd25lckgAEk0KFmRlbW90ZV9ob3VzZWhvbGRfYWRtaW4YPiABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGVtb3RlSG91c2Vob2xkQWRtaW5IABJRChhzdGFydF9ob3VzZWhvbGRfaGFuZG92ZXIYPyABKAsyLS5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3RhcnRIb3VzZWhvbGRIYW5kb3ZlckgAElUKGmNvbmZpcm1faG91c2Vob2xkX2hhbmRvdmVyGEAgASgLMi8ua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbmZpcm1Ib3VzZWhvbGRIYW5kb3ZlckgAElMKGWNhbmNlbF9ob3VzZWhvbGRfaGFuZG92ZXIYQSABKAsyLi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ2FuY2VsSG91c2Vob2xkSGFuZG92ZXJIABJRChhsaXN0X2hvdXNlaG9sZF9oYW5kb3ZlcnMYQiABKAsyLS5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdEhvdXNlaG9sZEhhbmRvdmVyc0gAEksKFWV4cG9ydF9ob3VzZWhvbGRfZGF0YRhDIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5FeHBvcnRIb3VzZWhvbGREYXRhSAASOwoNc2V0X2hvbWVfbmFtZRhEIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRIb21lTmFtZUgAQgkKB3JlcXVlc3RCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_access_v1_roles, file_kusinta_iot_accountlink_v1_account_link, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_commissioning_v1_commissioning, file_kusinta_iot_common_v1_types, file_kusinta_iot_heating_v1_heating, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan, file_kusinta_iot_webrtc_v1_household, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_members]);
26
27
 
27
28
  /**
28
29
  * Describes the message kusinta.iot.webrtc.v1.CreateSpace.
@@ -353,10 +354,45 @@ export const ConcludeCommissioningTestSchema = /*@__PURE__*/
353
354
  export const ListHomeSetupsSchema = /*@__PURE__*/
354
355
  messageDesc(file_kusinta_iot_webrtc_v1_management, 46);
355
356
 
357
+ /**
358
+ * Describes the message kusinta.iot.webrtc.v1.RequestCommissioningGrant.
359
+ * Use `create(RequestCommissioningGrantSchema)` to create a new message.
360
+ */
361
+ export const RequestCommissioningGrantSchema = /*@__PURE__*/
362
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 47);
363
+
364
+ /**
365
+ * Describes the message kusinta.iot.webrtc.v1.AnswerCommissioningGrant.
366
+ * Use `create(AnswerCommissioningGrantSchema)` to create a new message.
367
+ */
368
+ export const AnswerCommissioningGrantSchema = /*@__PURE__*/
369
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 48);
370
+
371
+ /**
372
+ * Describes the message kusinta.iot.webrtc.v1.EndCommissioningGrant.
373
+ * Use `create(EndCommissioningGrantSchema)` to create a new message.
374
+ */
375
+ export const EndCommissioningGrantSchema = /*@__PURE__*/
376
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 49);
377
+
378
+ /**
379
+ * Describes the message kusinta.iot.webrtc.v1.ListCommissioningGrants.
380
+ * Use `create(ListCommissioningGrantsSchema)` to create a new message.
381
+ */
382
+ export const ListCommissioningGrantsSchema = /*@__PURE__*/
383
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 50);
384
+
385
+ /**
386
+ * Describes the message kusinta.iot.webrtc.v1.SetAssetOwner.
387
+ * Use `create(SetAssetOwnerSchema)` to create a new message.
388
+ */
389
+ export const SetAssetOwnerSchema = /*@__PURE__*/
390
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 51);
391
+
356
392
  /**
357
393
  * Describes the message kusinta.iot.webrtc.v1.ManagementRequest.
358
394
  * Use `create(ManagementRequestSchema)` to create a new message.
359
395
  */
360
396
  export const ManagementRequestSchema = /*@__PURE__*/
361
- messageDesc(file_kusinta_iot_webrtc_v1_management, 47);
397
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 52);
362
398
 
@@ -90,12 +90,13 @@ export declare type SetMemberRole = Message<"kusinta.iot.webrtc.v1.SetMemberRole
90
90
  export declare const SetMemberRoleSchema: GenMessage<SetMemberRole>;
91
91
 
92
92
  /**
93
- * Asks a member to accept ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN. Answered with
93
+ * Asks a member to accept ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN, or, with home_id, to
94
+ * become a household admin of a home (HOUSEHOLD PROMOTION, below). Answered with
94
95
  * ManagementAck once the request is made; the role is granted only when the person asked
95
- * accepts it (AnswerPromotion). Only a caller holding ROLE_GATEWAY_ADMIN may; any other role
96
- * named is INVALID_REQUEST. The caller may ask themselves, as anyone.
96
+ * accepts it (AnswerPromotion). Only a caller holding ROLE_GATEWAY_ADMIN may ask for a role;
97
+ * any other role named is INVALID_REQUEST. The caller may ask themselves, as anyone.
97
98
  *
98
- * user_id is never a residency id (INVALID_REQUEST), as for SetMemberRole: a resident becomes
99
+ * For a role, user_id is never a residency id (INVALID_REQUEST), as for SetMemberRole: a resident becomes
99
100
  * staff by an act of their own — redeeming a SERVICE invite (invite.proto) — and is asked from
100
101
  * the entry that gives. A user id the caller is told nothing of under it is "not_a_member".
101
102
  * Naming ROLE_GATEWAY_ADMIN for a vouched administrator is refused as "vouched_admin";
@@ -110,9 +111,28 @@ export declare const SetMemberRoleSchema: GenMessage<SetMemberRole>;
110
111
  * ROLE_GATEWAY_ADMIN — an outgoing administrator of a transfer included
111
112
  * (signaling.v1.TransferOutcome) — since no administrator then stands behind it.
112
113
  *
113
- * The app shows the person asked, before they answer, that accepting makes their name and email
114
- * address shown to property owners and administrators (MemberDetail.name, MemberDetail.email),
115
- * and to residents by name (PrivacyDisclosure).
114
+ * The app shows the person asked for a role, before they answer, that accepting makes their name
115
+ * and email address shown to property owners and administrators (MemberDetail.name,
116
+ * MemberDetail.email), and to residents by name (PrivacyDisclosure).
117
+ *
118
+ * HOUSEHOLD PROMOTION. With home_id set it asks a resident of that home to become its household
119
+ * admin (access.v1.MEMBERSHIP_RELATION_HOUSEHOLD_ADMIN; household.proto) rather than for a
120
+ * role: role is then UNSPECIFIED, and anything else is INVALID_REQUEST, as is a home_id that is
121
+ * not an apartment. It is asked by:
122
+ * * a household admin of the home, of a resident of it named by user id (household.proto,
123
+ * PROMOTION);
124
+ * * the property owner or a gateway administrator who reaches the home, while it is
125
+ * admin-less, of one of its residents, named by residency id unless the caller lives there
126
+ * (household.proto, STAFF APPOINTMENT). This is the one request here a residency id may
127
+ * stand in; that section's refusals apply. From a caller who does not live there, a
128
+ * user_id that is not a residency id is INVALID_REQUEST, refused before it is looked up,
129
+ * so that the answer never says whether that user lives in the home.
130
+ * Anyone else is refused as NOT_ENTITLED. Someone who is not a resident of the home is
131
+ * "not_a_member"; asking a household admin of it changes nothing and is acknowledged. One
132
+ * request per resident and home, whoever asked. Besides the ends above, it ends when the person
133
+ * asked stops being a resident of the home, when the asker stops being a household admin of
134
+ * it — or, having asked as staff, stops holding both ROLE_PROPERTY_OWNER and
135
+ * ROLE_GATEWAY_ADMIN — and when the home comes to have a household admin otherwise.
116
136
  *
117
137
  * @generated from message kusinta.iot.webrtc.v1.RequestPromotion
118
138
  */
@@ -126,6 +146,13 @@ export declare type RequestPromotion = Message<"kusinta.iot.webrtc.v1.RequestPro
126
146
  * @generated from field: kusinta.iot.access.v1.Role role = 2;
127
147
  */
128
148
  role: Role;
149
+
150
+ /**
151
+ * Set for a household promotion: the apartment of the home. Unset for a role.
152
+ *
153
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 3;
154
+ */
155
+ homeId?: SpaceId | undefined;
129
156
  };
130
157
 
131
158
  /**
@@ -142,7 +169,10 @@ export declare const RequestPromotionSchema: GenMessage<RequestPromotion>;
142
169
  *
143
170
  * Accepting grants the role at once, and clears any end to the person's access
144
171
  * (MemberDetail.access_until): a property owner or an administrator is not there for a job. The
145
- * change reaches their open sessions at once. Declining ends the request and grants nothing; the
172
+ * change reaches their open sessions at once. Accepting a household promotion makes them a
173
+ * household admin of the home at once and changes nothing else — save that one staff asked is
174
+ * refused to a person holding a staff role, as "staff_appointee" (household.proto, STAFF
175
+ * APPOINTMENT), and ends. Declining ends the request and grants nothing; the
146
176
  * asker learns only that it is no longer pending.
147
177
  *
148
178
  * @generated from message kusinta.iot.webrtc.v1.AnswerPromotion
@@ -199,14 +229,15 @@ export declare type PromotionRequest = Message<"kusinta.iot.webrtc.v1.PromotionR
199
229
  requestId: string;
200
230
 
201
231
  /**
202
- * The person asked.
232
+ * The person asked: to an asker who does not live in the home of a household promotion,
233
+ * the residency id they named.
203
234
  *
204
235
  * @generated from field: kusinta.iot.identity.v1.UserId user_id = 2;
205
236
  */
206
237
  userId?: UserId | undefined;
207
238
 
208
239
  /**
209
- * ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN.
240
+ * ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN; UNSPECIFIED for a household promotion.
210
241
  *
211
242
  * @generated from field: kusinta.iot.access.v1.Role role = 3;
212
243
  */
@@ -237,6 +268,14 @@ export declare type PromotionRequest = Message<"kusinta.iot.webrtc.v1.PromotionR
237
268
  * @generated from field: google.protobuf.Timestamp expires_at = 7;
238
269
  */
239
270
  expiresAt?: Timestamp | undefined;
271
+
272
+ /**
273
+ * Set for a household promotion: the home whose household admin the person is asked to
274
+ * become (RequestPromotion.home_id).
275
+ *
276
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 8;
277
+ */
278
+ homeId?: SpaceId | undefined;
240
279
  };
241
280
 
242
281
  /**
@@ -280,6 +319,9 @@ export declare const PromotionRequestsSchema: GenMessage<PromotionRequests>;
280
319
  * then stays a member, a resident of it. By a residency id, it ends that residency alone, as
281
320
  * RemoveUserFromSpace would, with the invites the holder made as its resident.
282
321
  *
322
+ * A removal of themselves that would leave a home with residents but no household admin is
323
+ * refused as "last_household_admin" (household.proto, LAST ADMIN), and nothing is removed.
324
+ *
283
325
  * A caller holding ROLE_GATEWAY_ADMIN may remove anyone but a vouched administrator
284
326
  * ("vouched_admin"). A caller holding ROLE_PROPERTY_OWNER, and not ROLE_GATEWAY_ADMIN,
285
327
  * may remove only a member who holds neither ROLE_PROPERTY_OWNER nor ROLE_GATEWAY_ADMIN;
@@ -11,7 +11,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
11
11
  * Describes the file kusinta/iot/webrtc/v1/members.proto.
12
12
  */
13
13
  export const file_kusinta_iot_webrtc_v1_members = /*@__PURE__*/
14
- fileDesc("CiNrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWVtYmVycy5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxIhQKEkxpc3RHYXRld2F5TWVtYmVycyJ6Cg1TZXRNZW1iZXJSb2xlEjAKB3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSKQoEcm9sZRgCIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEgwKBGhlbGQYAyABKAgibwoQUmVxdWVzdFByb21vdGlvbhIwCgd1c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEikKBHJvbGUYAiABKA4yGy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuUm9sZSI1Cg9BbnN3ZXJQcm9tb3Rpb24SEgoKcmVxdWVzdF9pZBgBIAEoCRIOCgZhY2NlcHQYAiABKAgiFwoVTGlzdFByb21vdGlvblJlcXVlc3RzIrcCChBQcm9tb3Rpb25SZXF1ZXN0EhIKCnJlcXVlc3RfaWQYASABKAkSMAoHdXNlcl9pZBgCIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIpCgRyb2xlGAMgASgOMhsua3VzaW50YS5pb3QuYWNjZXNzLnYxLlJvbGUSNQoMcmVxdWVzdGVkX2J5GAQgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEhkKEXJlcXVlc3RlZF9ieV9uYW1lGAUgASgJEjAKDHJlcXVlc3RlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKZXhwaXJlc19hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiTgoRUHJvbW90aW9uUmVxdWVzdHMSOQoIcmVxdWVzdHMYASADKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvbW90aW9uUmVxdWVzdCJFChFSZW1vdmVGcm9tR2F0ZXdheRIwCgd1c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkInQKDlNldEFjY2Vzc1VudGlsEjAKB3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSMAoMYWNjZXNzX3VudGlsGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJWChRTZXRPd25lck9yZ2FuaXNhdGlvbhI+CgxvcmdhbmlzYXRpb24YASABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuT3duZXJPcmdhbmlzYXRpb24iQgoRT3duZXJPcmdhbmlzYXRpb24SDAoEbmFtZRgBIAEoCRIfChNvcmdhbmlzYXRpb25fbnVtYmVyGAIgASgJQgIYASKMAQoOR2F0ZXdheU1lbWJlcnMSNAoHbWVtYmVycxgBIAMoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NZW1iZXJEZXRhaWwSRAoSb3duZXJfb3JnYW5pc2F0aW9uGAIgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLk93bmVyT3JnYW5pc2F0aW9uIqoCCgxNZW1iZXJEZXRhaWwSMAoHdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIMCgRuYW1lGAIgASgJEioKBXJvbGVzGAMgAygOMhsua3VzaW50YS5pb3QuYWNjZXNzLnYxLlJvbGUSNwoLbWVtYmVyc2hpcHMYBCADKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTWVtYmVyU3BhY2USMAoMYWNjZXNzX3VudGlsGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIdChFyZWdpc3RlcmluZ19hZG1pbhgGIAEoCEICGAESDQoFZW1haWwYByABKAkSFQoNdm91Y2hlZF9hZG1pbhgIIAEoCCKpAQoLTWVtYmVyU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjsKCHJlbGF0aW9uGAIgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbhIpCgVzaW5jZRgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles, file_kusinta_iot_identity_v1_identity]);
14
+ fileDesc("CiNrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWVtYmVycy5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxIhQKEkxpc3RHYXRld2F5TWVtYmVycyJ6Cg1TZXRNZW1iZXJSb2xlEjAKB3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSKQoEcm9sZRgCIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEgwKBGhlbGQYAyABKAgiogEKEFJlcXVlc3RQcm9tb3Rpb24SMAoHdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIpCgRyb2xlGAIgASgOMhsua3VzaW50YS5pb3QuYWNjZXNzLnYxLlJvbGUSMQoHaG9tZV9pZBgDIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQiNQoPQW5zd2VyUHJvbW90aW9uEhIKCnJlcXVlc3RfaWQYASABKAkSDgoGYWNjZXB0GAIgASgIIhcKFUxpc3RQcm9tb3Rpb25SZXF1ZXN0cyLqAgoQUHJvbW90aW9uUmVxdWVzdBISCgpyZXF1ZXN0X2lkGAEgASgJEjAKB3VzZXJfaWQYAiABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSKQoEcm9sZRgDIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKDHJlcXVlc3RlZF9ieRgEIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIZChFyZXF1ZXN0ZWRfYnlfbmFtZRgFIAEoCRIwCgxyZXF1ZXN0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmV4cGlyZXNfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjEKB2hvbWVfaWQYCCABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIk4KEVByb21vdGlvblJlcXVlc3RzEjkKCHJlcXVlc3RzGAEgAygLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLlByb21vdGlvblJlcXVlc3QiRQoRUmVtb3ZlRnJvbUdhdGV3YXkSMAoHdXNlcl9pZBgBIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZCJ0Cg5TZXRBY2Nlc3NVbnRpbBIwCgd1c2VyX2lkGAEgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjAKDGFjY2Vzc191bnRpbBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiVgoUU2V0T3duZXJPcmdhbmlzYXRpb24SPgoMb3JnYW5pc2F0aW9uGAEgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLk93bmVyT3JnYW5pc2F0aW9uIkIKEU93bmVyT3JnYW5pc2F0aW9uEgwKBG5hbWUYASABKAkSHwoTb3JnYW5pc2F0aW9uX251bWJlchgCIAEoCUICGAEijAEKDkdhdGV3YXlNZW1iZXJzEjQKB21lbWJlcnMYASADKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTWVtYmVyRGV0YWlsEkQKEm93bmVyX29yZ2FuaXNhdGlvbhgCIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Pd25lck9yZ2FuaXNhdGlvbiKqAgoMTWVtYmVyRGV0YWlsEjAKB3VzZXJfaWQYASABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSDAoEbmFtZRgCIAEoCRIqCgVyb2xlcxgDIAMoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjcKC21lbWJlcnNoaXBzGAQgAygLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLk1lbWJlclNwYWNlEjAKDGFjY2Vzc191bnRpbBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASHQoRcmVnaXN0ZXJpbmdfYWRtaW4YBiABKAhCAhgBEg0KBWVtYWlsGAcgASgJEhUKDXZvdWNoZWRfYWRtaW4YCCABKAgiqQEKC01lbWJlclNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI7CghyZWxhdGlvbhgCIAEoDjIpLmt1c2ludGEuaW90LmFjY2Vzcy52MS5NZW1iZXJzaGlwUmVsYXRpb24SKQoFc2luY2UYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_roles, file_kusinta_iot_identity_v1_identity]);
15
15
 
16
16
  /**
17
17
  * Describes the message kusinta.iot.webrtc.v1.ListGatewayMembers.