%%HP: T(1)A(R)F(.); DIR PRFAC DUP IF PRTST NOT THEN 1 SF 2 "'" ROT ROT DCMP 1 + 1 CF WHILE OVER 1 REPEAT DCMP 2 + END DROP2 DUP SIZE 1 - 1 SWAP SUB "'" + STR END DCMP DUP2 MOD IF NOT THEN DUP STR 0 DO 1 + 4 ROLL 4 ROLL SWAP OVER / DUP2 6 ROLLD 5 ROLLD SWAP MOD UNTIL NOT NOT END DUP IF 1 THEN SWAP "^" + SWAP STR + ELSE DROP END ROT DUP IF PRTST THEN DUP 2 - 1 FS? + ROT 4 ROLL DROP ELSE ROT ROT END "*" + 4 ROLL SWAP + ROT ROT END PRTST DUP 2 / FP IF NOT NOT THEN DUP 1 DO 2 + 3 DUPN SWAP OVER UNTIL < ROT ROT MOD NOT OR END SWAP DROP MOD NOT END NOT END