1; 2; Copyright (c) 2017-2021 The Khronos Group Inc. 3; Copyright (c) 2017-2021 Valve Corporation 4; Copyright (c) 2017-2021 LunarG, Inc. 5; 6; Licensed under the Apache License, Version 2.0 (the "License"); 7; you may not use this file except in compliance with the License. 8; You may obtain a copy of the License at 9; 10; http://www.apache.org/licenses/LICENSE-2.0 11; 12; Unless required by applicable law or agreed to in writing, software 13; distributed under the License is distributed on an "AS IS" BASIS, 14; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15; See the License for the specific language governing permissions and 16; limitations under the License. 17; 18; Author: Lenny Komow <lenny@lunarg.com> 19; Author: Charles Giessen <charles@lunarg.com> 20; 21 22; This code is used to pass on device (including physical device) extensions through the call chain. It must do this without 23; creating a stack frame, because the actual parameters of the call are not known. Since the first parameter is known to be a 24; VkPhysicalDevice or a dispatchable object it can unwrap the object, possibly overwriting the wrapped physical device, and then 25; jump to the next function in the call chain 26 27; Codegen defines a number of values, chiefly offsets of members within structs and sizes of data types within gen_defines.asm. 28; Struct member offsets are defined in the format "XX_OFFSET_YY" where XX indicates the member within the struct and YY indicates 29; the struct type that it is a member of. Data type sizes are defined in the format "XX_SIZE" where XX indicates the data type. 30INCLUDE gen_defines.asm 31 32; 64-bit values and macro 33IFDEF rax 34 35PhysDevExtTramp macro num:req 36public vkPhysDevExtTramp&num& 37vkPhysDevExtTramp&num&: 38 mov rax, qword ptr [rcx] ; Dereference the wrapped VkPhysicalDevice to get the dispatch table in rax 39 mov rcx, qword ptr [rcx + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] ; Load the unwrapped VkPhysicalDevice into rcx 40 jmp qword ptr [rax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * num))] ; Jump to the next function in the chain, preserving the args in other registers 41endm 42 43PhysDevExtTermin macro num 44public vkPhysDevExtTermin&num& 45vkPhysDevExtTermin&num&: 46 mov rax, qword ptr [rcx + ICD_TERM_OFFSET_PHYS_DEV_TERM] ; Store the loader_icd_term* in rax 47 cmp qword ptr [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))], 0 ; Check if the next function in the chain is NULL 48 je terminError&num& ; Go to the error section if it is NULL 49 mov rcx, qword ptr [rcx + PHYS_DEV_OFFSET_PHYS_DEV_TERM] ; Load the unwrapped VkPhysicalDevice into the first arg 50 jmp qword ptr [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))] ; Jump to the next function in the chain 51terminError&num&: 52 sub rsp, 56 ; Create the stack frame 53 mov rcx, qword ptr [rax + INSTANCE_OFFSET_ICD_TERM] ; Load the loader_instance into rcx (first arg) 54 mov rax, qword ptr [rcx + (FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * num))] ; Load the func name into rax 55 lea r9, termin_error_string ; Load the error string into r9 (fourth arg) 56 xor r8d, r8d ; Set r8 to zero (third arg) 57 mov qword ptr [rsp + 32], rax ; Move the func name onto the stack (fifth arg) 58 lea edx, [r8 + VULKAN_LOADER_ERROR_BIT] ; Write the error logging bit to rdx (second arg) 59 call loader_log ; Log the error message before we crash 60 add rsp, 56 ; Clean up the stack frame 61 mov rax, 0 62 jmp rax ; Crash intentionally by jumping to address zero 63endm 64 65DevExtTramp macro num 66public vkdev_ext&num& 67vkdev_ext&num&: 68 mov rax, qword ptr [rcx] ; Dereference the handle to get the dispatch table 69 jmp qword ptr [rax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * num))] ; Jump to the appropriate call chain 70endm 71 72; 32-bit values and macro 73ELSE 74 75PhysDevExtTramp macro num 76public _vkPhysDevExtTramp&num&@4 77_vkPhysDevExtTramp&num&@4: 78 mov eax, dword ptr [esp + 4] ; Load the wrapped VkPhysicalDevice into eax 79 mov ecx, [eax + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] ; Load the unwrapped VkPhysicalDevice into ecx 80 mov [esp + 4], ecx ; Overwrite the wrapped VkPhysicalDevice with the unwrapped one (on the stack) 81 mov eax, [eax] ; Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax 82 jmp dword ptr [eax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * num))] ; Jump to the next function in the chain, preserving the args on the stack 83endm 84 85PhysDevExtTermin macro num 86public _vkPhysDevExtTermin&num&@4 87_vkPhysDevExtTermin&num&@4: 88 mov ecx, dword ptr [esp + 4] ; Move the wrapped VkPhysicalDevice into ecx 89 mov eax, dword ptr [ecx + ICD_TERM_OFFSET_PHYS_DEV_TERM] ; Store the loader_icd_term* in eax 90 cmp dword ptr [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))], 0 ; Check if the next function in the chain is NULL 91 je terminError&num& ; Go to the error section if it is NULL 92 mov ecx, dword ptr [ecx + PHYS_DEV_OFFSET_PHYS_DEV_TERM] ; Unwrap the VkPhysicalDevice in ecx 93 mov dword ptr [esp + 4], ecx ; Copy the unwrapped VkPhysicalDevice into the first arg 94 jmp dword ptr [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))] ; Jump to the next function in the chain 95terminError&num&: 96 mov eax, dword ptr [eax + INSTANCE_OFFSET_ICD_TERM] ; Load the loader_instance into eax 97 push dword ptr [eax + (FUNCTION_OFFSET_INSTANCE + (CHAR_PTR_SIZE * num))] ; Push the func name (fifth arg) 98 push offset termin_error_string ; Push the error string (fourth arg) 99 push 0 ; Push zero (third arg) 100 push VULKAN_LOADER_ERROR_BIT ; Push the error logging bit (second arg) 101 push eax ; Push the loader_instance (first arg) 102 call _loader_log ; Log the error message before we crash 103 add esp, 20 ; Clean up the args 104 mov eax, 0 105 jmp eax ; Crash intentionally by jumping to address zero 106endm 107 108DevExtTramp macro num 109public _vkdev_ext&num&@4 110_vkdev_ext&num&@4: 111 mov eax, dword ptr [esp + 4] ; Dereference the handle to get VkDevice chain_device 112 mov eax, dword ptr [eax] ; Dereference the chain_device to get the loader_dispatch 113 jmp dword ptr [eax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * num))] ; Jump to the appropriate call chain 114endm 115 116; This is also needed for 32-bit only 117.model flat 118 119ENDIF 120 121.const 122 termin_error_string db 'Extension %s not supported for this physical device', 0 123 124.code 125 126IFDEF rax 127extrn loader_log:near 128ELSE 129extrn _loader_log:near 130ENDIF 131 132 PhysDevExtTramp 0 133 PhysDevExtTramp 1 134 PhysDevExtTramp 2 135 PhysDevExtTramp 3 136 PhysDevExtTramp 4 137 PhysDevExtTramp 5 138 PhysDevExtTramp 6 139 PhysDevExtTramp 7 140 PhysDevExtTramp 8 141 PhysDevExtTramp 9 142 PhysDevExtTramp 10 143 PhysDevExtTramp 11 144 PhysDevExtTramp 12 145 PhysDevExtTramp 13 146 PhysDevExtTramp 14 147 PhysDevExtTramp 15 148 PhysDevExtTramp 16 149 PhysDevExtTramp 17 150 PhysDevExtTramp 18 151 PhysDevExtTramp 19 152 PhysDevExtTramp 20 153 PhysDevExtTramp 21 154 PhysDevExtTramp 22 155 PhysDevExtTramp 23 156 PhysDevExtTramp 24 157 PhysDevExtTramp 25 158 PhysDevExtTramp 26 159 PhysDevExtTramp 27 160 PhysDevExtTramp 28 161 PhysDevExtTramp 29 162 PhysDevExtTramp 30 163 PhysDevExtTramp 31 164 PhysDevExtTramp 32 165 PhysDevExtTramp 33 166 PhysDevExtTramp 34 167 PhysDevExtTramp 35 168 PhysDevExtTramp 36 169 PhysDevExtTramp 37 170 PhysDevExtTramp 38 171 PhysDevExtTramp 39 172 PhysDevExtTramp 40 173 PhysDevExtTramp 41 174 PhysDevExtTramp 42 175 PhysDevExtTramp 43 176 PhysDevExtTramp 44 177 PhysDevExtTramp 45 178 PhysDevExtTramp 46 179 PhysDevExtTramp 47 180 PhysDevExtTramp 48 181 PhysDevExtTramp 49 182 PhysDevExtTramp 50 183 PhysDevExtTramp 51 184 PhysDevExtTramp 52 185 PhysDevExtTramp 53 186 PhysDevExtTramp 54 187 PhysDevExtTramp 55 188 PhysDevExtTramp 56 189 PhysDevExtTramp 57 190 PhysDevExtTramp 58 191 PhysDevExtTramp 59 192 PhysDevExtTramp 60 193 PhysDevExtTramp 61 194 PhysDevExtTramp 62 195 PhysDevExtTramp 63 196 PhysDevExtTramp 64 197 PhysDevExtTramp 65 198 PhysDevExtTramp 66 199 PhysDevExtTramp 67 200 PhysDevExtTramp 68 201 PhysDevExtTramp 69 202 PhysDevExtTramp 70 203 PhysDevExtTramp 71 204 PhysDevExtTramp 72 205 PhysDevExtTramp 73 206 PhysDevExtTramp 74 207 PhysDevExtTramp 75 208 PhysDevExtTramp 76 209 PhysDevExtTramp 77 210 PhysDevExtTramp 78 211 PhysDevExtTramp 79 212 PhysDevExtTramp 80 213 PhysDevExtTramp 81 214 PhysDevExtTramp 82 215 PhysDevExtTramp 83 216 PhysDevExtTramp 84 217 PhysDevExtTramp 85 218 PhysDevExtTramp 86 219 PhysDevExtTramp 87 220 PhysDevExtTramp 88 221 PhysDevExtTramp 89 222 PhysDevExtTramp 90 223 PhysDevExtTramp 91 224 PhysDevExtTramp 92 225 PhysDevExtTramp 93 226 PhysDevExtTramp 94 227 PhysDevExtTramp 95 228 PhysDevExtTramp 96 229 PhysDevExtTramp 97 230 PhysDevExtTramp 98 231 PhysDevExtTramp 99 232 PhysDevExtTramp 100 233 PhysDevExtTramp 101 234 PhysDevExtTramp 102 235 PhysDevExtTramp 103 236 PhysDevExtTramp 104 237 PhysDevExtTramp 105 238 PhysDevExtTramp 106 239 PhysDevExtTramp 107 240 PhysDevExtTramp 108 241 PhysDevExtTramp 109 242 PhysDevExtTramp 110 243 PhysDevExtTramp 111 244 PhysDevExtTramp 112 245 PhysDevExtTramp 113 246 PhysDevExtTramp 114 247 PhysDevExtTramp 115 248 PhysDevExtTramp 116 249 PhysDevExtTramp 117 250 PhysDevExtTramp 118 251 PhysDevExtTramp 119 252 PhysDevExtTramp 120 253 PhysDevExtTramp 121 254 PhysDevExtTramp 122 255 PhysDevExtTramp 123 256 PhysDevExtTramp 124 257 PhysDevExtTramp 125 258 PhysDevExtTramp 126 259 PhysDevExtTramp 127 260 PhysDevExtTramp 128 261 PhysDevExtTramp 129 262 PhysDevExtTramp 130 263 PhysDevExtTramp 131 264 PhysDevExtTramp 132 265 PhysDevExtTramp 133 266 PhysDevExtTramp 134 267 PhysDevExtTramp 135 268 PhysDevExtTramp 136 269 PhysDevExtTramp 137 270 PhysDevExtTramp 138 271 PhysDevExtTramp 139 272 PhysDevExtTramp 140 273 PhysDevExtTramp 141 274 PhysDevExtTramp 142 275 PhysDevExtTramp 143 276 PhysDevExtTramp 144 277 PhysDevExtTramp 145 278 PhysDevExtTramp 146 279 PhysDevExtTramp 147 280 PhysDevExtTramp 148 281 PhysDevExtTramp 149 282 PhysDevExtTramp 150 283 PhysDevExtTramp 151 284 PhysDevExtTramp 152 285 PhysDevExtTramp 153 286 PhysDevExtTramp 154 287 PhysDevExtTramp 155 288 PhysDevExtTramp 156 289 PhysDevExtTramp 157 290 PhysDevExtTramp 158 291 PhysDevExtTramp 159 292 PhysDevExtTramp 160 293 PhysDevExtTramp 161 294 PhysDevExtTramp 162 295 PhysDevExtTramp 163 296 PhysDevExtTramp 164 297 PhysDevExtTramp 165 298 PhysDevExtTramp 166 299 PhysDevExtTramp 167 300 PhysDevExtTramp 168 301 PhysDevExtTramp 169 302 PhysDevExtTramp 170 303 PhysDevExtTramp 171 304 PhysDevExtTramp 172 305 PhysDevExtTramp 173 306 PhysDevExtTramp 174 307 PhysDevExtTramp 175 308 PhysDevExtTramp 176 309 PhysDevExtTramp 177 310 PhysDevExtTramp 178 311 PhysDevExtTramp 179 312 PhysDevExtTramp 180 313 PhysDevExtTramp 181 314 PhysDevExtTramp 182 315 PhysDevExtTramp 183 316 PhysDevExtTramp 184 317 PhysDevExtTramp 185 318 PhysDevExtTramp 186 319 PhysDevExtTramp 187 320 PhysDevExtTramp 188 321 PhysDevExtTramp 189 322 PhysDevExtTramp 190 323 PhysDevExtTramp 191 324 PhysDevExtTramp 192 325 PhysDevExtTramp 193 326 PhysDevExtTramp 194 327 PhysDevExtTramp 195 328 PhysDevExtTramp 196 329 PhysDevExtTramp 197 330 PhysDevExtTramp 198 331 PhysDevExtTramp 199 332 PhysDevExtTramp 200 333 PhysDevExtTramp 201 334 PhysDevExtTramp 202 335 PhysDevExtTramp 203 336 PhysDevExtTramp 204 337 PhysDevExtTramp 205 338 PhysDevExtTramp 206 339 PhysDevExtTramp 207 340 PhysDevExtTramp 208 341 PhysDevExtTramp 209 342 PhysDevExtTramp 210 343 PhysDevExtTramp 211 344 PhysDevExtTramp 212 345 PhysDevExtTramp 213 346 PhysDevExtTramp 214 347 PhysDevExtTramp 215 348 PhysDevExtTramp 216 349 PhysDevExtTramp 217 350 PhysDevExtTramp 218 351 PhysDevExtTramp 219 352 PhysDevExtTramp 220 353 PhysDevExtTramp 221 354 PhysDevExtTramp 222 355 PhysDevExtTramp 223 356 PhysDevExtTramp 224 357 PhysDevExtTramp 225 358 PhysDevExtTramp 226 359 PhysDevExtTramp 227 360 PhysDevExtTramp 228 361 PhysDevExtTramp 229 362 PhysDevExtTramp 230 363 PhysDevExtTramp 231 364 PhysDevExtTramp 232 365 PhysDevExtTramp 233 366 PhysDevExtTramp 234 367 PhysDevExtTramp 235 368 PhysDevExtTramp 236 369 PhysDevExtTramp 237 370 PhysDevExtTramp 238 371 PhysDevExtTramp 239 372 PhysDevExtTramp 240 373 PhysDevExtTramp 241 374 PhysDevExtTramp 242 375 PhysDevExtTramp 243 376 PhysDevExtTramp 244 377 PhysDevExtTramp 245 378 PhysDevExtTramp 246 379 PhysDevExtTramp 247 380 PhysDevExtTramp 248 381 PhysDevExtTramp 249 382 383 PhysDevExtTermin 0 384 PhysDevExtTermin 1 385 PhysDevExtTermin 2 386 PhysDevExtTermin 3 387 PhysDevExtTermin 4 388 PhysDevExtTermin 5 389 PhysDevExtTermin 6 390 PhysDevExtTermin 7 391 PhysDevExtTermin 8 392 PhysDevExtTermin 9 393 PhysDevExtTermin 10 394 PhysDevExtTermin 11 395 PhysDevExtTermin 12 396 PhysDevExtTermin 13 397 PhysDevExtTermin 14 398 PhysDevExtTermin 15 399 PhysDevExtTermin 16 400 PhysDevExtTermin 17 401 PhysDevExtTermin 18 402 PhysDevExtTermin 19 403 PhysDevExtTermin 20 404 PhysDevExtTermin 21 405 PhysDevExtTermin 22 406 PhysDevExtTermin 23 407 PhysDevExtTermin 24 408 PhysDevExtTermin 25 409 PhysDevExtTermin 26 410 PhysDevExtTermin 27 411 PhysDevExtTermin 28 412 PhysDevExtTermin 29 413 PhysDevExtTermin 30 414 PhysDevExtTermin 31 415 PhysDevExtTermin 32 416 PhysDevExtTermin 33 417 PhysDevExtTermin 34 418 PhysDevExtTermin 35 419 PhysDevExtTermin 36 420 PhysDevExtTermin 37 421 PhysDevExtTermin 38 422 PhysDevExtTermin 39 423 PhysDevExtTermin 40 424 PhysDevExtTermin 41 425 PhysDevExtTermin 42 426 PhysDevExtTermin 43 427 PhysDevExtTermin 44 428 PhysDevExtTermin 45 429 PhysDevExtTermin 46 430 PhysDevExtTermin 47 431 PhysDevExtTermin 48 432 PhysDevExtTermin 49 433 PhysDevExtTermin 50 434 PhysDevExtTermin 51 435 PhysDevExtTermin 52 436 PhysDevExtTermin 53 437 PhysDevExtTermin 54 438 PhysDevExtTermin 55 439 PhysDevExtTermin 56 440 PhysDevExtTermin 57 441 PhysDevExtTermin 58 442 PhysDevExtTermin 59 443 PhysDevExtTermin 60 444 PhysDevExtTermin 61 445 PhysDevExtTermin 62 446 PhysDevExtTermin 63 447 PhysDevExtTermin 64 448 PhysDevExtTermin 65 449 PhysDevExtTermin 66 450 PhysDevExtTermin 67 451 PhysDevExtTermin 68 452 PhysDevExtTermin 69 453 PhysDevExtTermin 70 454 PhysDevExtTermin 71 455 PhysDevExtTermin 72 456 PhysDevExtTermin 73 457 PhysDevExtTermin 74 458 PhysDevExtTermin 75 459 PhysDevExtTermin 76 460 PhysDevExtTermin 77 461 PhysDevExtTermin 78 462 PhysDevExtTermin 79 463 PhysDevExtTermin 80 464 PhysDevExtTermin 81 465 PhysDevExtTermin 82 466 PhysDevExtTermin 83 467 PhysDevExtTermin 84 468 PhysDevExtTermin 85 469 PhysDevExtTermin 86 470 PhysDevExtTermin 87 471 PhysDevExtTermin 88 472 PhysDevExtTermin 89 473 PhysDevExtTermin 90 474 PhysDevExtTermin 91 475 PhysDevExtTermin 92 476 PhysDevExtTermin 93 477 PhysDevExtTermin 94 478 PhysDevExtTermin 95 479 PhysDevExtTermin 96 480 PhysDevExtTermin 97 481 PhysDevExtTermin 98 482 PhysDevExtTermin 99 483 PhysDevExtTermin 100 484 PhysDevExtTermin 101 485 PhysDevExtTermin 102 486 PhysDevExtTermin 103 487 PhysDevExtTermin 104 488 PhysDevExtTermin 105 489 PhysDevExtTermin 106 490 PhysDevExtTermin 107 491 PhysDevExtTermin 108 492 PhysDevExtTermin 109 493 PhysDevExtTermin 110 494 PhysDevExtTermin 111 495 PhysDevExtTermin 112 496 PhysDevExtTermin 113 497 PhysDevExtTermin 114 498 PhysDevExtTermin 115 499 PhysDevExtTermin 116 500 PhysDevExtTermin 117 501 PhysDevExtTermin 118 502 PhysDevExtTermin 119 503 PhysDevExtTermin 120 504 PhysDevExtTermin 121 505 PhysDevExtTermin 122 506 PhysDevExtTermin 123 507 PhysDevExtTermin 124 508 PhysDevExtTermin 125 509 PhysDevExtTermin 126 510 PhysDevExtTermin 127 511 PhysDevExtTermin 128 512 PhysDevExtTermin 129 513 PhysDevExtTermin 130 514 PhysDevExtTermin 131 515 PhysDevExtTermin 132 516 PhysDevExtTermin 133 517 PhysDevExtTermin 134 518 PhysDevExtTermin 135 519 PhysDevExtTermin 136 520 PhysDevExtTermin 137 521 PhysDevExtTermin 138 522 PhysDevExtTermin 139 523 PhysDevExtTermin 140 524 PhysDevExtTermin 141 525 PhysDevExtTermin 142 526 PhysDevExtTermin 143 527 PhysDevExtTermin 144 528 PhysDevExtTermin 145 529 PhysDevExtTermin 146 530 PhysDevExtTermin 147 531 PhysDevExtTermin 148 532 PhysDevExtTermin 149 533 PhysDevExtTermin 150 534 PhysDevExtTermin 151 535 PhysDevExtTermin 152 536 PhysDevExtTermin 153 537 PhysDevExtTermin 154 538 PhysDevExtTermin 155 539 PhysDevExtTermin 156 540 PhysDevExtTermin 157 541 PhysDevExtTermin 158 542 PhysDevExtTermin 159 543 PhysDevExtTermin 160 544 PhysDevExtTermin 161 545 PhysDevExtTermin 162 546 PhysDevExtTermin 163 547 PhysDevExtTermin 164 548 PhysDevExtTermin 165 549 PhysDevExtTermin 166 550 PhysDevExtTermin 167 551 PhysDevExtTermin 168 552 PhysDevExtTermin 169 553 PhysDevExtTermin 170 554 PhysDevExtTermin 171 555 PhysDevExtTermin 172 556 PhysDevExtTermin 173 557 PhysDevExtTermin 174 558 PhysDevExtTermin 175 559 PhysDevExtTermin 176 560 PhysDevExtTermin 177 561 PhysDevExtTermin 178 562 PhysDevExtTermin 179 563 PhysDevExtTermin 180 564 PhysDevExtTermin 181 565 PhysDevExtTermin 182 566 PhysDevExtTermin 183 567 PhysDevExtTermin 184 568 PhysDevExtTermin 185 569 PhysDevExtTermin 186 570 PhysDevExtTermin 187 571 PhysDevExtTermin 188 572 PhysDevExtTermin 189 573 PhysDevExtTermin 190 574 PhysDevExtTermin 191 575 PhysDevExtTermin 192 576 PhysDevExtTermin 193 577 PhysDevExtTermin 194 578 PhysDevExtTermin 195 579 PhysDevExtTermin 196 580 PhysDevExtTermin 197 581 PhysDevExtTermin 198 582 PhysDevExtTermin 199 583 PhysDevExtTermin 200 584 PhysDevExtTermin 201 585 PhysDevExtTermin 202 586 PhysDevExtTermin 203 587 PhysDevExtTermin 204 588 PhysDevExtTermin 205 589 PhysDevExtTermin 206 590 PhysDevExtTermin 207 591 PhysDevExtTermin 208 592 PhysDevExtTermin 209 593 PhysDevExtTermin 210 594 PhysDevExtTermin 211 595 PhysDevExtTermin 212 596 PhysDevExtTermin 213 597 PhysDevExtTermin 214 598 PhysDevExtTermin 215 599 PhysDevExtTermin 216 600 PhysDevExtTermin 217 601 PhysDevExtTermin 218 602 PhysDevExtTermin 219 603 PhysDevExtTermin 220 604 PhysDevExtTermin 221 605 PhysDevExtTermin 222 606 PhysDevExtTermin 223 607 PhysDevExtTermin 224 608 PhysDevExtTermin 225 609 PhysDevExtTermin 226 610 PhysDevExtTermin 227 611 PhysDevExtTermin 228 612 PhysDevExtTermin 229 613 PhysDevExtTermin 230 614 PhysDevExtTermin 231 615 PhysDevExtTermin 232 616 PhysDevExtTermin 233 617 PhysDevExtTermin 234 618 PhysDevExtTermin 235 619 PhysDevExtTermin 236 620 PhysDevExtTermin 237 621 PhysDevExtTermin 238 622 PhysDevExtTermin 239 623 PhysDevExtTermin 240 624 PhysDevExtTermin 241 625 PhysDevExtTermin 242 626 PhysDevExtTermin 243 627 PhysDevExtTermin 244 628 PhysDevExtTermin 245 629 PhysDevExtTermin 246 630 PhysDevExtTermin 247 631 PhysDevExtTermin 248 632 PhysDevExtTermin 249 633 634 DevExtTramp 0 635 DevExtTramp 1 636 DevExtTramp 2 637 DevExtTramp 3 638 DevExtTramp 4 639 DevExtTramp 5 640 DevExtTramp 6 641 DevExtTramp 7 642 DevExtTramp 8 643 DevExtTramp 9 644 DevExtTramp 10 645 DevExtTramp 11 646 DevExtTramp 12 647 DevExtTramp 13 648 DevExtTramp 14 649 DevExtTramp 15 650 DevExtTramp 16 651 DevExtTramp 17 652 DevExtTramp 18 653 DevExtTramp 19 654 DevExtTramp 20 655 DevExtTramp 21 656 DevExtTramp 22 657 DevExtTramp 23 658 DevExtTramp 24 659 DevExtTramp 25 660 DevExtTramp 26 661 DevExtTramp 27 662 DevExtTramp 28 663 DevExtTramp 29 664 DevExtTramp 30 665 DevExtTramp 31 666 DevExtTramp 32 667 DevExtTramp 33 668 DevExtTramp 34 669 DevExtTramp 35 670 DevExtTramp 36 671 DevExtTramp 37 672 DevExtTramp 38 673 DevExtTramp 39 674 DevExtTramp 40 675 DevExtTramp 41 676 DevExtTramp 42 677 DevExtTramp 43 678 DevExtTramp 44 679 DevExtTramp 45 680 DevExtTramp 46 681 DevExtTramp 47 682 DevExtTramp 48 683 DevExtTramp 49 684 DevExtTramp 50 685 DevExtTramp 51 686 DevExtTramp 52 687 DevExtTramp 53 688 DevExtTramp 54 689 DevExtTramp 55 690 DevExtTramp 56 691 DevExtTramp 57 692 DevExtTramp 58 693 DevExtTramp 59 694 DevExtTramp 60 695 DevExtTramp 61 696 DevExtTramp 62 697 DevExtTramp 63 698 DevExtTramp 64 699 DevExtTramp 65 700 DevExtTramp 66 701 DevExtTramp 67 702 DevExtTramp 68 703 DevExtTramp 69 704 DevExtTramp 70 705 DevExtTramp 71 706 DevExtTramp 72 707 DevExtTramp 73 708 DevExtTramp 74 709 DevExtTramp 75 710 DevExtTramp 76 711 DevExtTramp 77 712 DevExtTramp 78 713 DevExtTramp 79 714 DevExtTramp 80 715 DevExtTramp 81 716 DevExtTramp 82 717 DevExtTramp 83 718 DevExtTramp 84 719 DevExtTramp 85 720 DevExtTramp 86 721 DevExtTramp 87 722 DevExtTramp 88 723 DevExtTramp 89 724 DevExtTramp 90 725 DevExtTramp 91 726 DevExtTramp 92 727 DevExtTramp 93 728 DevExtTramp 94 729 DevExtTramp 95 730 DevExtTramp 96 731 DevExtTramp 97 732 DevExtTramp 98 733 DevExtTramp 99 734 DevExtTramp 100 735 DevExtTramp 101 736 DevExtTramp 102 737 DevExtTramp 103 738 DevExtTramp 104 739 DevExtTramp 105 740 DevExtTramp 106 741 DevExtTramp 107 742 DevExtTramp 108 743 DevExtTramp 109 744 DevExtTramp 110 745 DevExtTramp 111 746 DevExtTramp 112 747 DevExtTramp 113 748 DevExtTramp 114 749 DevExtTramp 115 750 DevExtTramp 116 751 DevExtTramp 117 752 DevExtTramp 118 753 DevExtTramp 119 754 DevExtTramp 120 755 DevExtTramp 121 756 DevExtTramp 122 757 DevExtTramp 123 758 DevExtTramp 124 759 DevExtTramp 125 760 DevExtTramp 126 761 DevExtTramp 127 762 DevExtTramp 128 763 DevExtTramp 129 764 DevExtTramp 130 765 DevExtTramp 131 766 DevExtTramp 132 767 DevExtTramp 133 768 DevExtTramp 134 769 DevExtTramp 135 770 DevExtTramp 136 771 DevExtTramp 137 772 DevExtTramp 138 773 DevExtTramp 139 774 DevExtTramp 140 775 DevExtTramp 141 776 DevExtTramp 142 777 DevExtTramp 143 778 DevExtTramp 144 779 DevExtTramp 145 780 DevExtTramp 146 781 DevExtTramp 147 782 DevExtTramp 148 783 DevExtTramp 149 784 DevExtTramp 150 785 DevExtTramp 151 786 DevExtTramp 152 787 DevExtTramp 153 788 DevExtTramp 154 789 DevExtTramp 155 790 DevExtTramp 156 791 DevExtTramp 157 792 DevExtTramp 158 793 DevExtTramp 159 794 DevExtTramp 160 795 DevExtTramp 161 796 DevExtTramp 162 797 DevExtTramp 163 798 DevExtTramp 164 799 DevExtTramp 165 800 DevExtTramp 166 801 DevExtTramp 167 802 DevExtTramp 168 803 DevExtTramp 169 804 DevExtTramp 170 805 DevExtTramp 171 806 DevExtTramp 172 807 DevExtTramp 173 808 DevExtTramp 174 809 DevExtTramp 175 810 DevExtTramp 176 811 DevExtTramp 177 812 DevExtTramp 178 813 DevExtTramp 179 814 DevExtTramp 180 815 DevExtTramp 181 816 DevExtTramp 182 817 DevExtTramp 183 818 DevExtTramp 184 819 DevExtTramp 185 820 DevExtTramp 186 821 DevExtTramp 187 822 DevExtTramp 188 823 DevExtTramp 189 824 DevExtTramp 190 825 DevExtTramp 191 826 DevExtTramp 192 827 DevExtTramp 193 828 DevExtTramp 194 829 DevExtTramp 195 830 DevExtTramp 196 831 DevExtTramp 197 832 DevExtTramp 198 833 DevExtTramp 199 834 DevExtTramp 200 835 DevExtTramp 201 836 DevExtTramp 202 837 DevExtTramp 203 838 DevExtTramp 204 839 DevExtTramp 205 840 DevExtTramp 206 841 DevExtTramp 207 842 DevExtTramp 208 843 DevExtTramp 209 844 DevExtTramp 210 845 DevExtTramp 211 846 DevExtTramp 212 847 DevExtTramp 213 848 DevExtTramp 214 849 DevExtTramp 215 850 DevExtTramp 216 851 DevExtTramp 217 852 DevExtTramp 218 853 DevExtTramp 219 854 DevExtTramp 220 855 DevExtTramp 221 856 DevExtTramp 222 857 DevExtTramp 223 858 DevExtTramp 224 859 DevExtTramp 225 860 DevExtTramp 226 861 DevExtTramp 227 862 DevExtTramp 228 863 DevExtTramp 229 864 DevExtTramp 230 865 DevExtTramp 231 866 DevExtTramp 232 867 DevExtTramp 233 868 DevExtTramp 234 869 DevExtTramp 235 870 DevExtTramp 236 871 DevExtTramp 237 872 DevExtTramp 238 873 DevExtTramp 239 874 DevExtTramp 240 875 DevExtTramp 241 876 DevExtTramp 242 877 DevExtTramp 243 878 DevExtTramp 244 879 DevExtTramp 245 880 DevExtTramp 246 881 DevExtTramp 247 882 DevExtTramp 248 883 DevExtTramp 249 884 885end 886