]> git.saurik.com Git - apple/security.git/blob - keychain/ot/proto/generated_source/OTEscrowRecord.m
Security-59754.41.1.tar.gz
[apple/security.git] / keychain / ot / proto / generated_source / OTEscrowRecord.m
1 // This file was automatically generated by protocompiler
2 // DO NOT EDIT!
3 // Compiled from OTEscrowRecord.proto
4
5 #import "OTEscrowRecord.h"
6 #import <ProtocolBuffer/PBConstants.h>
7 #import <ProtocolBuffer/PBHashUtil.h>
8 #import <ProtocolBuffer/PBDataReader.h>
9
10 #import "OTEscrowRecordMetadata.h"
11
12 #if !__has_feature(objc_arc)
13 # error This generated file depends on ARC but it is not enabled; turn on ARC, or use 'objc_use_arc' option to generate non-ARC code.
14 #endif
15
16 @implementation OTEscrowRecord
17
18 @synthesize creationDate = _creationDate;
19 - (void)setCreationDate:(uint64_t)v
20 {
21 _has.creationDate = YES;
22 _creationDate = v;
23 }
24 - (void)setHasCreationDate:(BOOL)f
25 {
26 _has.creationDate = f;
27 }
28 - (BOOL)hasCreationDate
29 {
30 return _has.creationDate != 0;
31 }
32 @synthesize remainingAttempts = _remainingAttempts;
33 - (void)setRemainingAttempts:(uint64_t)v
34 {
35 _has.remainingAttempts = YES;
36 _remainingAttempts = v;
37 }
38 - (void)setHasRemainingAttempts:(BOOL)f
39 {
40 _has.remainingAttempts = f;
41 }
42 - (BOOL)hasRemainingAttempts
43 {
44 return _has.remainingAttempts != 0;
45 }
46 - (BOOL)hasEscrowInformationMetadata
47 {
48 return _escrowInformationMetadata != nil;
49 }
50 @synthesize escrowInformationMetadata = _escrowInformationMetadata;
51 - (BOOL)hasLabel
52 {
53 return _label != nil;
54 }
55 @synthesize label = _label;
56 @synthesize silentAttemptAllowed = _silentAttemptAllowed;
57 - (void)setSilentAttemptAllowed:(uint64_t)v
58 {
59 _has.silentAttemptAllowed = YES;
60 _silentAttemptAllowed = v;
61 }
62 - (void)setHasSilentAttemptAllowed:(BOOL)f
63 {
64 _has.silentAttemptAllowed = f;
65 }
66 - (BOOL)hasSilentAttemptAllowed
67 {
68 return _has.silentAttemptAllowed != 0;
69 }
70 @synthesize recordStatus = _recordStatus;
71 - (OTEscrowRecord_RecordStatus)recordStatus
72 {
73 return _has.recordStatus ? _recordStatus : OTEscrowRecord_RecordStatus_RECORD_STATUS_VALID;
74 }
75 - (void)setRecordStatus:(OTEscrowRecord_RecordStatus)v
76 {
77 _has.recordStatus = YES;
78 _recordStatus = v;
79 }
80 - (void)setHasRecordStatus:(BOOL)f
81 {
82 _has.recordStatus = f;
83 }
84 - (BOOL)hasRecordStatus
85 {
86 return _has.recordStatus != 0;
87 }
88 - (NSString *)recordStatusAsString:(OTEscrowRecord_RecordStatus)value
89 {
90 return OTEscrowRecord_RecordStatusAsString(value);
91 }
92 - (OTEscrowRecord_RecordStatus)StringAsRecordStatus:(NSString *)str
93 {
94 return StringAsOTEscrowRecord_RecordStatus(str);
95 }
96 - (BOOL)hasRecordId
97 {
98 return _recordId != nil;
99 }
100 @synthesize recordId = _recordId;
101 @synthesize recoveryStatus = _recoveryStatus;
102 - (OTEscrowRecord_RecoveryStatus)recoveryStatus
103 {
104 return _has.recoveryStatus ? _recoveryStatus : OTEscrowRecord_RecoveryStatus_RECOVERY_STATUS_VALID;
105 }
106 - (void)setRecoveryStatus:(OTEscrowRecord_RecoveryStatus)v
107 {
108 _has.recoveryStatus = YES;
109 _recoveryStatus = v;
110 }
111 - (void)setHasRecoveryStatus:(BOOL)f
112 {
113 _has.recoveryStatus = f;
114 }
115 - (BOOL)hasRecoveryStatus
116 {
117 return _has.recoveryStatus != 0;
118 }
119 - (NSString *)recoveryStatusAsString:(OTEscrowRecord_RecoveryStatus)value
120 {
121 return OTEscrowRecord_RecoveryStatusAsString(value);
122 }
123 - (OTEscrowRecord_RecoveryStatus)StringAsRecoveryStatus:(NSString *)str
124 {
125 return StringAsOTEscrowRecord_RecoveryStatus(str);
126 }
127 @synthesize coolOffEnd = _coolOffEnd;
128 - (void)setCoolOffEnd:(uint64_t)v
129 {
130 _has.coolOffEnd = YES;
131 _coolOffEnd = v;
132 }
133 - (void)setHasCoolOffEnd:(BOOL)f
134 {
135 _has.coolOffEnd = f;
136 }
137 - (BOOL)hasCoolOffEnd
138 {
139 return _has.coolOffEnd != 0;
140 }
141 - (BOOL)hasSerialNumber
142 {
143 return _serialNumber != nil;
144 }
145 @synthesize serialNumber = _serialNumber;
146 @synthesize recordViability = _recordViability;
147 - (OTEscrowRecord_RecordViability)recordViability
148 {
149 return _has.recordViability ? _recordViability : OTEscrowRecord_RecordViability_RECORD_VIABILITY_FULLY_VIABLE;
150 }
151 - (void)setRecordViability:(OTEscrowRecord_RecordViability)v
152 {
153 _has.recordViability = YES;
154 _recordViability = v;
155 }
156 - (void)setHasRecordViability:(BOOL)f
157 {
158 _has.recordViability = f;
159 }
160 - (BOOL)hasRecordViability
161 {
162 return _has.recordViability != 0;
163 }
164 - (NSString *)recordViabilityAsString:(OTEscrowRecord_RecordViability)value
165 {
166 return OTEscrowRecord_RecordViabilityAsString(value);
167 }
168 - (OTEscrowRecord_RecordViability)StringAsRecordViability:(NSString *)str
169 {
170 return StringAsOTEscrowRecord_RecordViability(str);
171 }
172 @synthesize viabilityStatus = _viabilityStatus;
173 - (OTEscrowRecord_SOSViability)viabilityStatus
174 {
175 return _has.viabilityStatus ? _viabilityStatus : OTEscrowRecord_SOSViability_SOS_VIABLE_UNKNOWN;
176 }
177 - (void)setViabilityStatus:(OTEscrowRecord_SOSViability)v
178 {
179 _has.viabilityStatus = YES;
180 _viabilityStatus = v;
181 }
182 - (void)setHasViabilityStatus:(BOOL)f
183 {
184 _has.viabilityStatus = f;
185 }
186 - (BOOL)hasViabilityStatus
187 {
188 return _has.viabilityStatus != 0;
189 }
190 - (NSString *)viabilityStatusAsString:(OTEscrowRecord_SOSViability)value
191 {
192 return OTEscrowRecord_SOSViabilityAsString(value);
193 }
194 - (OTEscrowRecord_SOSViability)StringAsViabilityStatus:(NSString *)str
195 {
196 return StringAsOTEscrowRecord_SOSViability(str);
197 }
198
199 - (NSString *)description
200 {
201 return [NSString stringWithFormat:@"%@ %@", [super description], [self dictionaryRepresentation]];
202 }
203
204 - (NSDictionary *)dictionaryRepresentation
205 {
206 NSMutableDictionary *dict = [NSMutableDictionary dictionary];
207 if (self->_has.creationDate)
208 {
209 [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_creationDate] forKey:@"creation_date"];
210 }
211 if (self->_has.remainingAttempts)
212 {
213 [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_remainingAttempts] forKey:@"remaining_attempts"];
214 }
215 if (self->_escrowInformationMetadata)
216 {
217 [dict setObject:[_escrowInformationMetadata dictionaryRepresentation] forKey:@"escrow_information_metadata"];
218 }
219 if (self->_label)
220 {
221 [dict setObject:self->_label forKey:@"label"];
222 }
223 if (self->_has.silentAttemptAllowed)
224 {
225 [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_silentAttemptAllowed] forKey:@"silent_attempt_allowed"];
226 }
227 if (self->_has.recordStatus)
228 {
229 [dict setObject:OTEscrowRecord_RecordStatusAsString(self->_recordStatus) forKey:@"record_status"];
230 }
231 if (self->_recordId)
232 {
233 [dict setObject:self->_recordId forKey:@"record_id"];
234 }
235 if (self->_has.recoveryStatus)
236 {
237 [dict setObject:OTEscrowRecord_RecoveryStatusAsString(self->_recoveryStatus) forKey:@"recovery_status"];
238 }
239 if (self->_has.coolOffEnd)
240 {
241 [dict setObject:[NSNumber numberWithUnsignedLongLong:self->_coolOffEnd] forKey:@"cool_off_end"];
242 }
243 if (self->_serialNumber)
244 {
245 [dict setObject:self->_serialNumber forKey:@"serial_number"];
246 }
247 if (self->_has.recordViability)
248 {
249 [dict setObject:OTEscrowRecord_RecordViabilityAsString(self->_recordViability) forKey:@"record_viability"];
250 }
251 if (self->_has.viabilityStatus)
252 {
253 [dict setObject:OTEscrowRecord_SOSViabilityAsString(self->_viabilityStatus) forKey:@"viability_status"];
254 }
255 return dict;
256 }
257
258 BOOL OTEscrowRecordReadFrom(__unsafe_unretained OTEscrowRecord *self, __unsafe_unretained PBDataReader *reader) {
259 while (PBReaderHasMoreData(reader)) {
260 uint32_t tag = 0;
261 uint8_t aType = 0;
262
263 PBReaderReadTag32AndType(reader, &tag, &aType);
264
265 if (PBReaderHasError(reader))
266 break;
267
268 if (aType == TYPE_END_GROUP) {
269 break;
270 }
271
272 switch (tag) {
273
274 case 1 /* creationDate */:
275 {
276 self->_has.creationDate = YES;
277 self->_creationDate = PBReaderReadUint64(reader);
278 }
279 break;
280 case 2 /* remainingAttempts */:
281 {
282 self->_has.remainingAttempts = YES;
283 self->_remainingAttempts = PBReaderReadUint64(reader);
284 }
285 break;
286 case 3 /* escrowInformationMetadata */:
287 {
288 OTEscrowRecordMetadata *new_escrowInformationMetadata = [[OTEscrowRecordMetadata alloc] init];
289 self->_escrowInformationMetadata = new_escrowInformationMetadata;
290 PBDataReaderMark mark_escrowInformationMetadata;
291 BOOL markError = !PBReaderPlaceMark(reader, &mark_escrowInformationMetadata);
292 if (markError)
293 {
294 return NO;
295 }
296 BOOL inError = !OTEscrowRecordMetadataReadFrom(new_escrowInformationMetadata, reader);
297 if (inError)
298 {
299 return NO;
300 }
301 PBReaderRecallMark(reader, &mark_escrowInformationMetadata);
302 }
303 break;
304 case 4 /* label */:
305 {
306 NSString *new_label = PBReaderReadString(reader);
307 self->_label = new_label;
308 }
309 break;
310 case 9 /* silentAttemptAllowed */:
311 {
312 self->_has.silentAttemptAllowed = YES;
313 self->_silentAttemptAllowed = PBReaderReadUint64(reader);
314 }
315 break;
316 case 10 /* recordStatus */:
317 {
318 self->_has.recordStatus = YES;
319 self->_recordStatus = PBReaderReadInt32(reader);
320 }
321 break;
322 case 11 /* recordId */:
323 {
324 NSString *new_recordId = PBReaderReadString(reader);
325 self->_recordId = new_recordId;
326 }
327 break;
328 case 12 /* recoveryStatus */:
329 {
330 self->_has.recoveryStatus = YES;
331 self->_recoveryStatus = PBReaderReadInt32(reader);
332 }
333 break;
334 case 13 /* coolOffEnd */:
335 {
336 self->_has.coolOffEnd = YES;
337 self->_coolOffEnd = PBReaderReadUint64(reader);
338 }
339 break;
340 case 14 /* serialNumber */:
341 {
342 NSString *new_serialNumber = PBReaderReadString(reader);
343 self->_serialNumber = new_serialNumber;
344 }
345 break;
346 case 15 /* recordViability */:
347 {
348 self->_has.recordViability = YES;
349 self->_recordViability = PBReaderReadInt32(reader);
350 }
351 break;
352 case 16 /* viabilityStatus */:
353 {
354 self->_has.viabilityStatus = YES;
355 self->_viabilityStatus = PBReaderReadInt32(reader);
356 }
357 break;
358 default:
359 if (!PBReaderSkipValueWithTag(reader, tag, aType))
360 return NO;
361 break;
362 }
363 }
364 return !PBReaderHasError(reader);
365 }
366
367 - (BOOL)readFrom:(PBDataReader *)reader
368 {
369 return OTEscrowRecordReadFrom(self, reader);
370 }
371 - (void)writeTo:(PBDataWriter *)writer
372 {
373 /* creationDate */
374 {
375 if (self->_has.creationDate)
376 {
377 PBDataWriterWriteUint64Field(writer, self->_creationDate, 1);
378 }
379 }
380 /* remainingAttempts */
381 {
382 if (self->_has.remainingAttempts)
383 {
384 PBDataWriterWriteUint64Field(writer, self->_remainingAttempts, 2);
385 }
386 }
387 /* escrowInformationMetadata */
388 {
389 if (self->_escrowInformationMetadata != nil)
390 {
391 PBDataWriterWriteSubmessage(writer, self->_escrowInformationMetadata, 3);
392 }
393 }
394 /* label */
395 {
396 if (self->_label)
397 {
398 PBDataWriterWriteStringField(writer, self->_label, 4);
399 }
400 }
401 /* silentAttemptAllowed */
402 {
403 if (self->_has.silentAttemptAllowed)
404 {
405 PBDataWriterWriteUint64Field(writer, self->_silentAttemptAllowed, 9);
406 }
407 }
408 /* recordStatus */
409 {
410 if (self->_has.recordStatus)
411 {
412 PBDataWriterWriteInt32Field(writer, self->_recordStatus, 10);
413 }
414 }
415 /* recordId */
416 {
417 if (self->_recordId)
418 {
419 PBDataWriterWriteStringField(writer, self->_recordId, 11);
420 }
421 }
422 /* recoveryStatus */
423 {
424 if (self->_has.recoveryStatus)
425 {
426 PBDataWriterWriteInt32Field(writer, self->_recoveryStatus, 12);
427 }
428 }
429 /* coolOffEnd */
430 {
431 if (self->_has.coolOffEnd)
432 {
433 PBDataWriterWriteUint64Field(writer, self->_coolOffEnd, 13);
434 }
435 }
436 /* serialNumber */
437 {
438 if (self->_serialNumber)
439 {
440 PBDataWriterWriteStringField(writer, self->_serialNumber, 14);
441 }
442 }
443 /* recordViability */
444 {
445 if (self->_has.recordViability)
446 {
447 PBDataWriterWriteInt32Field(writer, self->_recordViability, 15);
448 }
449 }
450 /* viabilityStatus */
451 {
452 if (self->_has.viabilityStatus)
453 {
454 PBDataWriterWriteInt32Field(writer, self->_viabilityStatus, 16);
455 }
456 }
457 }
458
459 - (void)copyTo:(OTEscrowRecord *)other
460 {
461 if (self->_has.creationDate)
462 {
463 other->_creationDate = _creationDate;
464 other->_has.creationDate = YES;
465 }
466 if (self->_has.remainingAttempts)
467 {
468 other->_remainingAttempts = _remainingAttempts;
469 other->_has.remainingAttempts = YES;
470 }
471 if (_escrowInformationMetadata)
472 {
473 other.escrowInformationMetadata = _escrowInformationMetadata;
474 }
475 if (_label)
476 {
477 other.label = _label;
478 }
479 if (self->_has.silentAttemptAllowed)
480 {
481 other->_silentAttemptAllowed = _silentAttemptAllowed;
482 other->_has.silentAttemptAllowed = YES;
483 }
484 if (self->_has.recordStatus)
485 {
486 other->_recordStatus = _recordStatus;
487 other->_has.recordStatus = YES;
488 }
489 if (_recordId)
490 {
491 other.recordId = _recordId;
492 }
493 if (self->_has.recoveryStatus)
494 {
495 other->_recoveryStatus = _recoveryStatus;
496 other->_has.recoveryStatus = YES;
497 }
498 if (self->_has.coolOffEnd)
499 {
500 other->_coolOffEnd = _coolOffEnd;
501 other->_has.coolOffEnd = YES;
502 }
503 if (_serialNumber)
504 {
505 other.serialNumber = _serialNumber;
506 }
507 if (self->_has.recordViability)
508 {
509 other->_recordViability = _recordViability;
510 other->_has.recordViability = YES;
511 }
512 if (self->_has.viabilityStatus)
513 {
514 other->_viabilityStatus = _viabilityStatus;
515 other->_has.viabilityStatus = YES;
516 }
517 }
518
519 - (id)copyWithZone:(NSZone *)zone
520 {
521 OTEscrowRecord *copy = [[[self class] allocWithZone:zone] init];
522 if (self->_has.creationDate)
523 {
524 copy->_creationDate = _creationDate;
525 copy->_has.creationDate = YES;
526 }
527 if (self->_has.remainingAttempts)
528 {
529 copy->_remainingAttempts = _remainingAttempts;
530 copy->_has.remainingAttempts = YES;
531 }
532 copy->_escrowInformationMetadata = [_escrowInformationMetadata copyWithZone:zone];
533 copy->_label = [_label copyWithZone:zone];
534 if (self->_has.silentAttemptAllowed)
535 {
536 copy->_silentAttemptAllowed = _silentAttemptAllowed;
537 copy->_has.silentAttemptAllowed = YES;
538 }
539 if (self->_has.recordStatus)
540 {
541 copy->_recordStatus = _recordStatus;
542 copy->_has.recordStatus = YES;
543 }
544 copy->_recordId = [_recordId copyWithZone:zone];
545 if (self->_has.recoveryStatus)
546 {
547 copy->_recoveryStatus = _recoveryStatus;
548 copy->_has.recoveryStatus = YES;
549 }
550 if (self->_has.coolOffEnd)
551 {
552 copy->_coolOffEnd = _coolOffEnd;
553 copy->_has.coolOffEnd = YES;
554 }
555 copy->_serialNumber = [_serialNumber copyWithZone:zone];
556 if (self->_has.recordViability)
557 {
558 copy->_recordViability = _recordViability;
559 copy->_has.recordViability = YES;
560 }
561 if (self->_has.viabilityStatus)
562 {
563 copy->_viabilityStatus = _viabilityStatus;
564 copy->_has.viabilityStatus = YES;
565 }
566 return copy;
567 }
568
569 - (BOOL)isEqual:(id)object
570 {
571 OTEscrowRecord *other = (OTEscrowRecord *)object;
572 return [other isMemberOfClass:[self class]]
573 &&
574 ((self->_has.creationDate && other->_has.creationDate && self->_creationDate == other->_creationDate) || (!self->_has.creationDate && !other->_has.creationDate))
575 &&
576 ((self->_has.remainingAttempts && other->_has.remainingAttempts && self->_remainingAttempts == other->_remainingAttempts) || (!self->_has.remainingAttempts && !other->_has.remainingAttempts))
577 &&
578 ((!self->_escrowInformationMetadata && !other->_escrowInformationMetadata) || [self->_escrowInformationMetadata isEqual:other->_escrowInformationMetadata])
579 &&
580 ((!self->_label && !other->_label) || [self->_label isEqual:other->_label])
581 &&
582 ((self->_has.silentAttemptAllowed && other->_has.silentAttemptAllowed && self->_silentAttemptAllowed == other->_silentAttemptAllowed) || (!self->_has.silentAttemptAllowed && !other->_has.silentAttemptAllowed))
583 &&
584 ((self->_has.recordStatus && other->_has.recordStatus && self->_recordStatus == other->_recordStatus) || (!self->_has.recordStatus && !other->_has.recordStatus))
585 &&
586 ((!self->_recordId && !other->_recordId) || [self->_recordId isEqual:other->_recordId])
587 &&
588 ((self->_has.recoveryStatus && other->_has.recoveryStatus && self->_recoveryStatus == other->_recoveryStatus) || (!self->_has.recoveryStatus && !other->_has.recoveryStatus))
589 &&
590 ((self->_has.coolOffEnd && other->_has.coolOffEnd && self->_coolOffEnd == other->_coolOffEnd) || (!self->_has.coolOffEnd && !other->_has.coolOffEnd))
591 &&
592 ((!self->_serialNumber && !other->_serialNumber) || [self->_serialNumber isEqual:other->_serialNumber])
593 &&
594 ((self->_has.recordViability && other->_has.recordViability && self->_recordViability == other->_recordViability) || (!self->_has.recordViability && !other->_has.recordViability))
595 &&
596 ((self->_has.viabilityStatus && other->_has.viabilityStatus && self->_viabilityStatus == other->_viabilityStatus) || (!self->_has.viabilityStatus && !other->_has.viabilityStatus))
597 ;
598 }
599
600 - (NSUInteger)hash
601 {
602 return 0
603 ^
604 (self->_has.creationDate ? PBHashInt((NSUInteger)self->_creationDate) : 0)
605 ^
606 (self->_has.remainingAttempts ? PBHashInt((NSUInteger)self->_remainingAttempts) : 0)
607 ^
608 [self->_escrowInformationMetadata hash]
609 ^
610 [self->_label hash]
611 ^
612 (self->_has.silentAttemptAllowed ? PBHashInt((NSUInteger)self->_silentAttemptAllowed) : 0)
613 ^
614 (self->_has.recordStatus ? PBHashInt((NSUInteger)self->_recordStatus) : 0)
615 ^
616 [self->_recordId hash]
617 ^
618 (self->_has.recoveryStatus ? PBHashInt((NSUInteger)self->_recoveryStatus) : 0)
619 ^
620 (self->_has.coolOffEnd ? PBHashInt((NSUInteger)self->_coolOffEnd) : 0)
621 ^
622 [self->_serialNumber hash]
623 ^
624 (self->_has.recordViability ? PBHashInt((NSUInteger)self->_recordViability) : 0)
625 ^
626 (self->_has.viabilityStatus ? PBHashInt((NSUInteger)self->_viabilityStatus) : 0)
627 ;
628 }
629
630 - (void)mergeFrom:(OTEscrowRecord *)other
631 {
632 if (other->_has.creationDate)
633 {
634 self->_creationDate = other->_creationDate;
635 self->_has.creationDate = YES;
636 }
637 if (other->_has.remainingAttempts)
638 {
639 self->_remainingAttempts = other->_remainingAttempts;
640 self->_has.remainingAttempts = YES;
641 }
642 if (self->_escrowInformationMetadata && other->_escrowInformationMetadata)
643 {
644 [self->_escrowInformationMetadata mergeFrom:other->_escrowInformationMetadata];
645 }
646 else if (!self->_escrowInformationMetadata && other->_escrowInformationMetadata)
647 {
648 [self setEscrowInformationMetadata:other->_escrowInformationMetadata];
649 }
650 if (other->_label)
651 {
652 [self setLabel:other->_label];
653 }
654 if (other->_has.silentAttemptAllowed)
655 {
656 self->_silentAttemptAllowed = other->_silentAttemptAllowed;
657 self->_has.silentAttemptAllowed = YES;
658 }
659 if (other->_has.recordStatus)
660 {
661 self->_recordStatus = other->_recordStatus;
662 self->_has.recordStatus = YES;
663 }
664 if (other->_recordId)
665 {
666 [self setRecordId:other->_recordId];
667 }
668 if (other->_has.recoveryStatus)
669 {
670 self->_recoveryStatus = other->_recoveryStatus;
671 self->_has.recoveryStatus = YES;
672 }
673 if (other->_has.coolOffEnd)
674 {
675 self->_coolOffEnd = other->_coolOffEnd;
676 self->_has.coolOffEnd = YES;
677 }
678 if (other->_serialNumber)
679 {
680 [self setSerialNumber:other->_serialNumber];
681 }
682 if (other->_has.recordViability)
683 {
684 self->_recordViability = other->_recordViability;
685 self->_has.recordViability = YES;
686 }
687 if (other->_has.viabilityStatus)
688 {
689 self->_viabilityStatus = other->_viabilityStatus;
690 self->_has.viabilityStatus = YES;
691 }
692 }
693
694 @end
695