|
|
1.1 ! root 1: .TH VDFORMAT 8S "27 March 1985" ! 2: .UC 4 ! 3: .SH NAME ! 4: .I Vdformat ! 5: \- Format disk media and / or relocate bad sectors on drives attached to VDDC ! 6: disk controllers. ! 7: .SH DESCRIPTION ! 8: .PP ! 9: .I Vdformat ! 10: is a stand-alone program used to ! 11: format and certify disk media before constructing new file systems, ! 12: or to replace newly formed bad spots on existing file systems. ! 13: In both cases, the result is a ! 14: virtually perfect disk surface for data storage. ! 15: This manual page describes the operation of ! 16: .I vdformat ! 17: and the error messages which may be produced during abnormal operations. ! 18: .PP ! 19: \fBFormatting\fP a disk surface is a simple operation; it consists of ! 20: blindly writing the sector format information (including the ! 21: sector number, gaps, and data area) to each sector on the disk media. ! 22: The controller uses this information during normal operations to find ! 23: the correct sector on the disk to write on. ! 24: .PP ! 25: \fBCertifying\fP the medium is a little more difficult than formatting. ! 26: It is accomplished ! 27: by writing test patterns to each sector, ! 28: reading them back, and comparing the resultant data to the original patterns. ! 29: A sector is considered bad if either a hard or soft error occured while ! 30: accessing the disk. ( ! 31: .I Hard errors ! 32: are characterized by unrecoverable ! 33: disk data errors, or by ! 34: differences revealed when comparing the disk data with the original ! 35: certification pattern. ! 36: On the other hand, data errors that were corrected by the ! 37: disk controller's error correction circuitry are termed ! 38: .I soft errors. ) ! 39: .PP ! 40: The patterns used for certification are: ! 41: .sp 1 ! 42: .nf ! 43: pattern #0 -- 49249249 (hex) ! 44: pattern #1 -- 6cb1b360 (hex) ! 45: pattern #2 -- b6db6db6 (hex) ! 46: pattern #3 -- 33333333 (hex) ! 47: pattern #4 -- ffff2924 (hex) ! 48: pattern #5 -- 6db6db6d (hex) ! 49: pattern #6 -- 09d6cd80 (hex) ! 50: pattern #7 -- b2c6cd80 (hex) ! 51: pattern #8 -- db6db6db (hex) ! 52: pattern #9 -- 88888888 (hex) ! 53: .fi ! 54: .sp 1 ! 55: These patterns were selected from a list of patterns recommended ! 56: by CDC, DEC, and CCI engineers. The selection was made by ! 57: studying the general effectiveness of each pattern and selecting the ! 58: ten most efficacious patterns. ! 59: .PP ! 60: As a rule: ! 61: as more patterns are used during certification, more soft errors will ! 62: be discovered. If the only concern is finding every hard error on the disk, ! 63: then one or two patterns are sufficient. However, if ! 64: finding every soft spot on the disk is a high priority, then ! 65: use all ten patterns. Fair warning: expect at least four and one-half ! 66: hours of formatting ! 67: time, per drive, if all ten patterns are used on a high capacity drive. ! 68: .PP ! 69: During relocation ! 70: .I vdformat ! 71: reads the list of blocks to be relocated, allocates an unused ! 72: flawless sector, and ! 73: commands the VDDC controller to replace the bad sector with the new sector. ! 74: To minimize data loss owing to media defects; the data is read out of ! 75: each sector being replaced and written back into the new sector ! 76: for later access. No guarantees are given for ! 77: data integrity if the sector being replaced contained a hard error, but, ! 78: most of the data should still be intact. ! 79: .PP ! 80: After attempting to relocate each sector; ! 81: .I vdformat ! 82: will display a line informing the operator of the operation's results. ! 83: If the relocation was ! 84: successful the sector number of the new sector will be displayed, otherwise, ! 85: the operator will ! 86: be told about the failure and processing will continue. ! 87: .PP ! 88: If a drive develops uncorrectable ! 89: defects after formatting and certification, or annoying soft spots appear, ! 90: use the \fBrelocation option\fP ! 91: to map out all the new bad sectors. ! 92: When this is done, the disk will once again ! 93: have a perfect surface for data storage. ! 94: .SH EXAMPLES ! 95: Sample runs of ! 96: .I vdformat ! 97: are shown below. The format option and the relocation option are shown ! 98: separately. Boldface means user input. Parenthetical lines are comments. ! 99: .PP ! 100: The output from ! 101: .I vdformat ! 102: is verbose. This is done for two reasons: to provide possitive ! 103: feedback to the operator so he/she will ! 104: know exactly what is happening, and to aid diagnostics ! 105: if a failure occurs. ! 106: .nf ! 107: .sp ! 108: \fBEXAMPLE OF FORMAT OPTION\fP ! 109: .in +0.2i ! 110: Boot ! 111: : \fBxfd(0,0)/stand/vdformat\fP ! 112: nnnnn+nnnn+nnnnnn start 0x800 ! 113: Do you wish to format media? [y/n] (n): \fBy\fP ! 114: This is DESTRUCTIVE! Are you sure? [y/n] (y): \fBy\fP ! 115: Number of patterns to use when verifying? [1-10]: (5) \fB10\fP ! 116: ! 117: Enter controller number and drive number for each disk. ! 118: Key <RETURN> to controller number prompt when through. ! 119: ! 120: Controller number? [0-3]: \fB0\fP ! 121: Unit number? [0-3]: \fB1\fP ! 122: Drive type? [fsd/smd/xfd/xsd]: \fBxfd\fP ! 123: Is an 'xfd' drive on controller 0 unit 1 ok? [y/n] (n): \fBy\fP ! 124: ! 125: Controller number? [0-3]: (just a 'return' means no more entries) ! 126: ! 127: *********** Formatting on controller 0, drive 1, started *********** ! 128: ! 129: Formatting media... ! 130: Formatting complete. ! 131: Creating maintenance cylinders... ! 132: Verifying maintenance area... ! 133: ! 134: Scanning cylinder 709.. ! 135: ! 136: No bad sectors found in maintenance area. ! 137: Maintenance area verified. ! 138: Writing read only patterns. ! 139: Writing Read / Write patterns. ! 140: Maintenance cylinders complete. ! 141: Scanning for bad sectors... ! 142: Verifying bad sector relocation area... ! 143: ! 144: Scanning cylinder 706... ! 145: The following sector is bad: ! 146: 542977 ! 147: ! 148: 1 bad sector found in file system area. ! 149: Relocation area verified. ! 150: Verifying file system area... ! 151: ! 152: Scanning cylinder 0........................................... ! 153: : (prints one dot for each cylinder verified.) ! 154: : ! 155: : ! 156: Scanning cylinder 700...... (4 1/2 hours later...) ! 157: The following sectors are bad: ! 158: 1639 ! 159: 2407 ! 160: 271323 ! 161: ! 162: 3 bad sectors found in file system area. ! 163: File system area verified. ! 164: ! 165: Bad block scan complete. ! 166: Relocating bad sectors... ! 167: Sector #1639 relocated to sector #542215 ! 168: Sector #2407 relocated to sector #542247 ! 169: Sector #271323 relocated to sector #542235 ! 170: Relocation complete. ! 171: ! 172: ********** Formatting on controller 0, drive 1 completed ok. ********** ! 173: .in -0.2i ! 174: .sp ! 175: \fBEXAMPLE OF RELOCATION OPTION\fP ! 176: .in +0.2i ! 177: Boot ! 178: : \fBxfd(0,0)/stand/vdformat\fP ! 179: nnnnn+nnnn+nnnnnn start 0x800 ! 180: Do you wish to format media? [y/n] (n): \fBn\fP ! 181: Do you wish to relocate bad sectors? [y/n] (n): \fBy\fP ! 182: ! 183: Enter controller number and drive number for each disk. ! 184: Key <RETURN> to controller number prompt when through. ! 185: ! 186: Controller number? [0-3]: \fB0\fP ! 187: Unit number? [0-3]: \fB1\fP ! 188: Drive type? [fsd/smd/xfd/xsd]: \fBxfd\fP ! 189: Is an 'xfd' drive on controller 0 unit 1 ok? [y/n] (n): \fBy\fP ! 190: ! 191: Controller number? [0-3]: ! 192: ! 193: *********** Relocation on controller 0, drive 1, started *********** ! 194: ! 195: Just key <RETURN> when through entering sector numbers. ! 196: Sector number? \fB4711\fP ! 197: Relocate sector #4711? [y/n] (n) \fBy\fP ! 198: ! 199: Sector number? \fB9640\fP ! 200: Relocate sector #9640? [y/n] (n) \fBy\fP ! 201: ! 202: Sector number? \fB8519\fP ! 203: Relocate sector #8519? [y/n] (n) \fBy\fP ! 204: ! 205: Sector number? ! 206: ! 207: Relocating bad sectors... ! 208: Sector #4711 relocated to sector #542343 ! 209: Sector #8519 relocated to sector #542375 ! 210: Sector #9640 relocated to sector #542216 ! 211: Relocation complete. ! 212: ! 213: ********** Relocation on controller 0, drive 1 completed ok. ********** ! 214: .in -0.2i ! 215: .fi ! 216: .sp 1 ! 217: .SH DIAGNOSTICS ! 218: .sp 1 ! 219: Below is a list of each possible error message, an explanation ! 220: of what the message means, and suggestions for corrective actions. ! 221: Any comments related to hardware problems are in no way ! 222: definitive or complete; they are merely meant to aim the operator in the ! 223: probable direction when a failure occurs. ! 224: .PP ! 225: Every error will produce one or more ! 226: messages, and each hard error will display the status word that caused ! 227: .I vdformat ! 228: to fail. The status word will be displayed in hexadecimal, so ! 229: conversion to binary is up to the operator. ! 230: The meanings of the status word's bit fields are: ! 231: .sp 1 ! 232: .in +0.1i ! 233: .nf ! 234: 31 0 ! 235: +--------------------------------+ ! 236: |||||||||||||||||||||||||||||||||| ! 237: +--------------------------------+ ! 238: ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ! 239: ||||| |||||||||||||||||||||||||+-- Header CRC error detected. ! 240: ||||| ||||||||||||||||||||||||+--- Header compare error. ! 241: ||||| |||||||||||||||||||||||+---- Disk write protected. ! 242: ||||| ||||||||||||||||||||||+----- Controller fault. ! 243: ||||| |||||||||||||||||||||+------ Disk seek error. ! 244: ||||| ||||||||||||||||||||+------- Uncorrectable data error. ! 245: ||||| |||||||||||||||||||+-------- Disk not on cylinder. ! 246: ||||| ||||||||||||||||||+--------- Disk drive not ready. ! 247: ||||| |||||||||||||||||+---------- Alternate track accessed. ! 248: ||||| ||||||||||||||||+----------- Seek started. ! 249: ||||| |||||||||||||||+------------ Invalid disk address issued. ! 250: ||||| ||||||||||||||+------------- Non-existent memory error. ! 251: ||||| |||||||||||||+-------------- Main memory parity error. ! 252: ||||| ||||||||||||+--------------- Data compare error. ! 253: ||||| |||||||||||+---------------- Drive is ready. ! 254: ||||| ||||||||||+----------------- Operation aborted. ! 255: ||||| |||||||||+------------------ Tried data strobe early. ! 256: ||||| ||||||||+------------------- Tried data strobe late. ! 257: ||||| |||||||+-------------------- Tried track offset plus. ! 258: ||||| ||||||+--------------------- Tried track offset minus. ! 259: ||||| |||||+---------------------- Controller performed data correction. ! 260: ||||| ||||+----------------------- Uncorrected error happened (hard). ! 261: ||||| |||+------------------------ Corrected error happened (soft). ! 262: ||||| ||+------------------------- An error happened (hard or soft). ! 263: ||||| |+-------------------------- Invalid command. ! 264: ||||+-+--------------------------- unused. ! 265: |||+------------------------------ DCB aborted by system. ! 266: ||+------------------------------- Unsuccessful completion. ! 267: |+-------------------------------- DCB completed. ! 268: +--------------------------------- DCB started. ! 269: .fi ! 270: .sp 1 ! 271: .in -0.2i ! 272: \fBError messages and their meanings.\fP ! 273: .sp 1 ! 274: .in +0.2i ! 275: .nf ! 276: 1. \fB****** Formatting on controller x, drive y ABORTED! *****\fP ! 277: .fi ! 278: .in +0.5i ! 279: An uncorrectable error was encountered and the format operation was ! 280: terminated. The lines above this message should show exactly what ! 281: happened to force conclusion of the formatting process. ! 282: If another unit is on the list of drives to be formatted then processing ! 283: will continue with the next drive. ! 284: .in -0.5i ! 285: .sp 1 ! 286: .nf ! 287: 2. \fB****** Relocation on controller x, drive y ABORTED! *****\fP ! 288: .fi ! 289: .in +0.5i ! 290: An uncorrectable error was encountered and the relocate operation was ! 291: terminated. The lines above this message should show exactly what ! 292: happened to force conclusion of the relocation process. ! 293: If another unit is to have sectors relocated then processing ! 294: will continue with the next drive. ! 295: .in -0.5i ! 296: .sp 1 ! 297: .nf ! 298: 3. \fBA drive number must be specified!\fP ! 299: .fi ! 300: .in +0.5i ! 301: Only a carriage return was keyed in response to the "Drive number" prompt. ! 302: There is no default drive number, so ! 303: .I vdformat ! 304: checks to make sure that a valid drive number was specified, and forces ! 305: the operator to enter a valid drive number. ! 306: .in -0.5i ! 307: .sp 1 ! 308: .nf ! 309: 4. \fBAn operation must be specified!\fP ! 310: .fi ! 311: .in +0.5i ! 312: .I Vdformat ! 313: has only two options: format, and relocate. If neither operation was ! 314: specified, this error message is printed and the operator is given ! 315: another chance at specifying an appropriate operation. ! 316: .in -0.5i ! 317: .sp 1 ! 318: .nf ! 319: 5. \fBBad sector relocation area is full!\fP ! 320: .fi ! 321: .in +0.5i ! 322: An appropriate relocation sector could not be allocated on the disk. ! 323: The disk should be replaced. ! 324: .in -0.5i ! 325: .sp 1 ! 326: .nf ! 327: 6. \fBSector number must be between 0 and nnn!\fP ! 328: .fi ! 329: .in +0.5i ! 330: The sector number specified for relocation was out of range for the disk. ! 331: Reenter an appropriate number. ! 332: .in -0.5i ! 333: .sp 1 ! 334: .nf ! 335: 7. \fBController number nn is illegal!\fP ! 336: .fi ! 337: .in +0.5i ! 338: The controller number specified was either non-numeric ! 339: or out of range. ! 340: Reenter an appropriate number. ! 341: .in -0.5i ! 342: .sp 1 ! 343: .nf ! 344: 8. \fBCPU aborted operation! Status = xxxxxxxx\fP ! 345: .fi ! 346: .in +0.5i ! 347: This message should never happen, but if it does it is indicative of a ! 348: CPU related problem. ! 349: .in -0.5i ! 350: .sp 1 ! 351: .nf ! 352: 9. \fBData error during format operation!\fP ! 353: .fi ! 354: .in +0.5i ! 355: A \fBreally bad\fP spot was found on the disk surface. The spot was so ! 356: bad that formatting can not continue... If the cables to the drive are intact, ! 357: the disk drive should be replaced. ! 358: .in -0.5i ! 359: .sp 1 ! 360: .nf ! 361: 10. \fBDisk seek error! Status = xxxxxxxx\fP ! 362: .fi ! 363: .in +0.5i ! 364: The disk failed to seek to a new cylinder properly. Check cables to ! 365: the drive, and if they are ok, replace the drive. ! 366: .in -0.5i ! 367: .sp 1 ! 368: .nf ! 369: 11. \fBDrive failed to start!\fP ! 370: .fi ! 371: .in +0.5i ! 372: A stopped drive failed to spin up when commanded to do so. Make sure the ! 373: "start" button on the drive is depressed, the cables are ok, and the disk ! 374: is powered on. If everything is ok, and the problem still persists, try ! 375: powering the system down to reset the Versabus. If that fails replace ! 376: the drive. ! 377: .in -0.5i ! 378: .sp 1 ! 379: .nf ! 380: 12. \fBDrive is not ready! Status = xxxxxxxx\fP ! 381: .fi ! 382: .in +0.5i ! 383: The disk suddenly spun down or dropped off cylinder. Check cables to ! 384: the drive, and if they are ok, replace the drive. ! 385: .in -0.5i ! 386: .sp 1 ! 387: .nf ! 388: 13. \fBDrive is write protected! Status = xxxxxxxx\fP ! 389: .fi ! 390: .in +0.5i ! 391: The drive was write protected during a write or format operation. Release ! 392: the write protect switch on the drive and start the operation over. ! 393: .in -0.5i ! 394: .sp 1 ! 395: .nf ! 396: 14. \fBDrive number nn is illegal!\fP ! 397: .fi ! 398: .in +0.5i ! 399: Each controller can have a maximum of four drives connected to it. ! 400: Therefore, the drive number must be between zero and three. (All drive and ! 401: controller numbers are zero relative.) Reenter a drive number between zero ! 402: and three. ! 403: .in -0.5i ! 404: .sp 1 ! 405: .nf ! 406: 15. \fBDump of MDCB: nnn nnn nnn and DCB: nnn nnn nnn nnn nnn nnn nnn\fP ! 407: .fi ! 408: .in +0.5i ! 409: This message is for use by CCI systems programmers to aid diagnoses over the ! 410: phone. The meaning of each field is as follows: ! 411: .sp 1 ! 412: .nf ! 413: .in +0.3i ! 414: \fBMDCB Layout\fP ! 415: +--------+--------+--------+--------+ ! 416: | Address of first DCB | ! 417: +--------+--------+--------+--------+ ! 418: | Address of current DCB | ! 419: +--------+--------+--------+--------+ ! 420: | Address of DCB causing interupt | ! 421: +--------+--------+--------+--------+ ! 422: | Controller status | (see description above.) ! 423: +--------+--------+--------+--------+ ! 424: ! 425: ! 426: .ti +0.05i ! 427: \fBDCB Layout\fP ! 428: +--------+--------+--------+--------+ ! 429: | Address of next DCB | ! 430: +--------+--------+--------+--------+ ! 431: | interupt flags | opcode | ! 432: +--------+--------+--------+--------+ ! 433: | operation status | (see description above.) ! 434: +--------+--------+--------+--------+ ! 435: | | | trailer| ! 436: | unused | unit | word | ! 437: | | | count | ! 438: +--------+--------+--------+--------+ ! 439: | error memory address | ! 440: +--------+--------+--------+--------+ ! 441: | error word count | ! 442: +--------+--------+--------+--------+ ! 443: | error track | error cylinder | ! 444: +--------+--------+--------+--------+ ! 445: | trailer | ! 446: | : | ! 447: +--------+--------+--------+--------+ ! 448: .fi ! 449: .in -0.8i ! 450: .sp 1 ! 451: .nf ! 452: 16. \fBEntry ignored!\fP ! 453: .fi ! 454: .in +0.5i ! 455: This message is just an advisory message. ! 456: When verifying that a controller / drive / drive type combination is ! 457: ok and the operator answered 'no', it shows that this combination will ! 458: not be entered into the list of drives to be done. ! 459: .in -0.5i ! 460: .sp 1 ! 461: .nf ! 462: 17. \fBIllegal drive type 'xxx'\fP ! 463: .fi ! 464: .in +0.5i ! 465: Drive type specified was not an 'fsd', 'smd', 'xfd' or 'xsd' ! 466: drive. Specify ! 467: a correct drive type. ! 468: .in -0.5i ! 469: .sp 1 ! 470: .nf ! 471: 18. \fBInvalid disk address issued! Status = xxxxxxxx\fP ! 472: .fi ! 473: .in +0.5i ! 474: A disk address, that the drive was incapable of seeking to, was issued. ! 475: Make sure the drive type was specified correctly. If the drive type was ! 476: correct, check cables and controller firmware revision levels for problems. ! 477: .in -0.5i ! 478: .sp 1 ! 479: .nf ! 480: 19. \fBMain memory parity error! Status = xxxxxxxx\fP ! 481: .fi ! 482: .in +0.5i ! 483: An uncorrectable parity error was detected while accessing system ! 484: memory. Run memory diagnostics before continuing. ! 485: .in -0.5i ! 486: .sp 1 ! 487: .nf ! 488: 20. \fBMaximum of 1000 bad tracks exceeded!\fP ! 489: .fi ! 490: .in +0.5i ! 491: For the sake of sanity, an arbitrary limit of 1000 disk errors was set. ! 492: If a disk has more than one-thousand errors, then the disk ! 493: should be replaced. Be sure to check the cables before throwing out a ! 494: perfectly good disk though. ! 495: .in -0.5i ! 496: .sp 1 ! 497: .nf ! 498: 21. \fBNon-existent memory error! Status = xxxxxxxx\fP ! 499: .fi ! 500: .in +0.5i ! 501: The VDDC disk controller was asked to write to memory that is not ! 502: present on the system memory bus. Check the CPU operations and ! 503: the main memory voltages to ensure proper operation before retrying. ! 504: .in -0.5i ! 505: .sp 1 ! 506: .nf ! 507: 22. \fBNot on cylinder error! Status = xxxxxxxx\fP ! 508: .fi ! 509: .in +0.5i ! 510: The disk suddenly spun down or dropped off cylinder. Check cables to ! 511: the drive, and the controller revision level, if they are ok, replace the drive. ! 512: .in -0.5i ! 513: .sp 1 ! 514: .nf ! 515: 23. \fBPattern count must be between 1 and 10.\fP ! 516: .fi ! 517: .in +0.5i ! 518: From one to ten patterns may be used during certification. The operator ! 519: entered a number that was greater than ten. Reenter a correct number. ! 520: .in -0.5i ! 521: .sp 1 ! 522: .nf ! 523: 24. \fBResponse must start with a digit!\fP ! 524: .fi ! 525: .in +0.5i ! 526: All numbers entered should start with a decimal digit. Number conversions ! 527: stop at the end of line character, or the first non-numeric character found. ! 528: Reenter line containing only numeric characters. ! 529: .in -0.5i ! 530: .sp 1 ! 531: .nf ! 532: 25. \fBSector #nnnnnnnn was not relocated successfully! Status = xxxxxxxx\fP ! 533: .fi ! 534: .in +0.5i ! 535: After attempting to relocate a sector, the controller failed to show ! 536: successful relocation of the sector. Check cables, controller revision levels, ! 537: and, if all else fails, try a new drive. ! 538: .in -0.5i ! 539: .sp 1 ! 540: .nf ! 541: 26. \fBVDDC controller timeout during drive configuration.\fP ! 542: .fi ! 543: .in +0.5i ! 544: The disk controller got hung up during a configuration operation. ! 545: This should not happen, however, if it does, ! 546: reset system, check cables, and controller prom ! 547: revision levels then try again. ! 548: .in -0.5i ! 549: .sp 1 ! 550: .nf ! 551: 27. \fBVDDC controller timeout during startup operation.\fP ! 552: .fi ! 553: .in +0.5i ! 554: The disk controller got hung up while trying to start the drives. ! 555: Reset system, check cables, ! 556: and controller prom revision levels, then try again. ! 557: .in -0.5i ! 558: .sp 1 ! 559: .nf ! 560: 28. \fBVDDC controller timeout in access.\fP ! 561: .fi ! 562: .in +0.5i ! 563: Controller hung up while trying to read or write to disk. ! 564: Reset system, check cables, and controller prom revision levels, then try again. ! 565: .in -0.5i ! 566: .sp 1 ! 567: .nf ! 568: 29. \fBVDDC controller timeout in format sectors.\fP ! 569: .fi ! 570: .in +0.5i ! 571: The disk controller hung up while trying to format a drive. ! 572: Reset system, check cables, and controller prom revision levels, then try again. ! 573: .in -0.5i ! 574: .sp 1 ! 575: .nf ! 576: 30. \fBYou must specify at least one controller number!\fP ! 577: .fi ! 578: .in +0.5i ! 579: During a \fBformat\fP or \fBrelocation\fP operation, ! 580: there must be at least one unit ! 581: on the list of drives left to do. Enter at least one controller / ! 582: unit / drive type and then the operation can begin. ! 583: .in -0.7i ! 584: .sp 1 ! 585: .SH BUGS ! 586: Occasionally the VDDC controller hangs up and \fBwill not reset\fP itself when ! 587: commanded to do so. Since there is no way to reset the Versabus from the ! 588: Power-6 CPU, the controller can only be reset by turning the power to the CPU ! 589: off and then on again. Until that is done, every drive ! 590: attached to the hung controller will also fail when accessed. ! 591: This problem should rarely, if ever, occur.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.