mirror of
https://github.com/emmansun/gmsm.git
synced 2025-09-15 11:28:03 +08:00
![github-actions[bot]](/assets/img/avatar_default.png)
* build(deps): bump github/codeql-action from 3.29.11 to 3.30.0 (#361) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.29.11 to 3.30.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](3c3833e0f8...2d92b76c45
) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 3.30.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump codecov/codecov-action from 5.5.0 to 5.5.1 (#362) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.5.0 to 5.5.1. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](fdcc847654...5a1091511a
) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 5.5.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump actions/setup-go from 5.5.0 to 6.0.0 (#363) Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5.5.0 to 6.0.0. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](d35c59abb0...4469467582
) --- updated-dependencies: - dependency-name: actions/setup-go dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump github/codeql-action from 3.30.0 to 3.30.1 (#364) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.30.0 to 3.30.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](2d92b76c45...f1f6e5f6af
) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 3.30.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump step-security/harden-runner from 2.13.0 to 2.13.1 (#367) Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.13.0 to 2.13.1. - [Release notes](https://github.com/step-security/harden-runner/releases) - [Commits](ec9f2d5744...f4a75cfd61
) --- updated-dependencies: - dependency-name: step-security/harden-runner dependency-version: 2.13.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump github/codeql-action from 3.30.1 to 3.30.2 (#368) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.30.1 to 3.30.2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](f1f6e5f6af...d3678e237b
) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 3.30.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat(mlkem): initialize mlkem from golang standard library * chore(mlkem): refactoring, reduce alloc times * build(deps): bump github/codeql-action from 3.30.2 to 3.30.3 (#369) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.30.2 to 3.30.3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](d3678e237b...192325c861
) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 3.30.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * doc(README): include MLKEM --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sun Yimin <emmansun@users.noreply.github.com>
337 lines
134 KiB
Go
337 lines
134 KiB
Go
// Copyright 2025 Sun Yimin. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build go1.24
|
|
|
|
package mlkem
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"errors"
|
|
"io"
|
|
"testing"
|
|
)
|
|
|
|
// https://github.com/usnistgov/ACVP-Server/blob/master/gen-val/json-files/ML-KEM-keyGen-FIPS203/internalProjection.json
|
|
var kenGen1024InternalProjectionCases = []struct {
|
|
tcId int
|
|
seed string
|
|
ek string
|
|
dk string
|
|
}{
|
|
{
|
|
51,
|
|
"2B5330C4F23BFDFD5C31F050BA3B38235324BF032372FC12D04DD08920F0BD590A064D6C06CEAB73E59CFCA9FF6402255A326AEF1E9CB678BF36929DAFE29A58",
|
|
"B24174A5B00DBF520CB9E3783D482E03CA3166D40D082A7BAB664845B617ADD98C07C6A3C3204F812035683A1D4F10AC1DE764706CCE96D75832A462A8B1B82CF471CBF808A26508D9FAA543F2CD980377D6F794367938064B6DD388C529756963B12CA594B306AB3F0EBBB6ED47601AEC1074A2B0D1B41717F8C695F174EF734052077E53DC9F47316B6608B7EDB54EA3631A36BB8D842CAF27367C15C18DDBA7AFE62AA572133384CB872555948A165F204C2CB4503C9D8ACE5F5217194A67EBD2A72F99562F98B2B773B6965C071BF11DEED395BC153ED6967492D88D5EF32D05E008B7958A2F36B9DB06CCDC52A626417966B19C5079A9892BA426A0362FB18E7EC07FFDC0C5DBE264DEEC41BC83A573599A25A8909B2476682336CEC9A396201A000A9C1BE792D9988FBC03C24855C1B242AE27A127CD36415CFB0D98CCBB9BD83AF5988D743773ACEA4201AC935E7CCC46E92D8E84A9D70CC626965429450980E0782EE11CD91169CE94BF89C14EC10B900EB4B77129A859039AD1253E5657B261E9855BC4B0F504C478D58F4A388215A0715168109526C2DAC555007C66E10B79EB92471ACC9A640805BD947EEA45B66A2C02D5B7C9029945B581666D470CD2654EB51C3304AC52CB11382B8628553B63742C41B293467B754DF8F52A7B9A5EF2359BF34025A9318DF92B1471EC529E895814999C551356ECC9CA945641067B16AC04B4169CC2F8A3B9A005047AC1AA4DF27FF284C7AB19A800629B5A85B06834623AC018D2E4CA1CA197D7B458C185BE0BA9B4703811F8628D13B690602544BD69AFAE215F5BDB51315CB570D48D8B55120D50560E59594C8B5603FBCC7E484EAF591070865FADD495C4D67BFC67CF1CB94ACD50C8970A226C0BC0FFA186BDC51DD235AC8D085F348374C88C6206E147233104306916E30635F0AB1B956644E02A4EE2BCC3246088D3D570A617A63150B32BD50DAA555DD6BB8B6D34C0CBA83A41C23B48B39708D7578D33C5A60AA28430CB10BA264D158ABFF301A00732BD95539190436AD02F89315CE921499C04305D81CFB7997ABA4B2D65639A34901B67972C9A2355B5A10E91F955E0A95FF33A21FA4A8B8E018EA6E43F34462DAF95A29DCC719C2B7EEAE50350497006F6AC53D28FCBF90845B02A8846C58D6494C0C603283476AF121767A9600C83A9E92B8D7B19C2680B1948044B807C9EA7EC94BE30CF3AEA676D16159FA3BC97C055ED0A439AF5C2F085BC0680A5DED6820843C3D3F65138E5ACE48C7A0C11037161674826084FD9BA3113223F18564A9B8DD98472D1837AB85B66E2C2638A4A8D9DD6C361BA6B86629FED9B6E76DC75B258908B750117E8A4763A1C0C0BBE5E2616C5D55B60720371F06D63893061FA6B3C76A600179B52F0C319F47A10189A0F566A7292C40CD9980C0112F265660C3B4F60736A9693454A7B861F834D35B838F8A647771630BCBC1F23F6AA887CB6CBD582CC2240CDBA864167506A43C434C27EAD754484D232A83BC40C2218306816030A20765A5470217E5B2C90846344CD8BC2C498B770E83CD1959DC152BCCB4ACEAB36ABF7F3618C1247F5DB201310C0A1E574FA547C398CC5A44AC23685B64D07B8F6614016C4271B71C650A8B520A5AFA08BA04EE51646B8A7FB652D3AF57A4010558F856FACC9911E09B332C5870EDB61E8E850BB1949AE5755C1FBA2CC472073029FD6542BCDA71B7952BCF811608F2A88291A04F2664BB1112E27B1235B16C19203214E79145A318C5110152DA36BB21ACA73801185D6B8B1F6A344B33B3E550FB5DC29BCD19846E84074BBC8F7580CD347B52F12A7D1616C55A2CD1F5C4AA86702DD530FA05A641302A16127468E85522E567570B65FC3F834D85A20973A0EB2B210D5812CFDFB881CC3AA06AB4CB77BBA7CDC6BCEE53C020B3343B9BD9A8298AD2055EE1A6070849140A86288721815C79734773F4097CF4741CC9635A30C8100B20733D3980B350393FAAC4CD0E66E4737C681DBBCC8D7953FA77454C422AD870E278B1121C33C8273370E5B686A6AAB17FCA3B67A3040D6491241BF5E3072FBDC1E422413FA5B4E9EE91EB3C936E21A5C7856942F44A55670A688A69E91A9A80BF4094C301DF705334DACB0CD929473829F34F37947D22B55C062F4CCF703EE3C1CC0BA7316DD658E6B6E0815F8FC9A70B1BBA325EC32E2930916",
|
|
"F7517C1258A61E1936F15B11DBBB33A7F7733CCCB2D9493CBF29945C751E2519347AA3894541CC2F1010D590447872547238C2FDEA5764BA0D098030962A0EC6BB816B077FF4EC2EF1E6B4AB45B21DC99EA433B4B8F4CB36A41D1497A06BDC43CB79AA0F739E6286AFA063B908138FE837330E48A47A097EFADC3AACBAA059B320B2B81DAD5A9C27B24A66D74B3AAB48E6E355AAF18074DA3E9BE2418CC143388153DF649572036ABCA2096C85839E034D34FCA6B9530B07E80534479A3BB6B7B09922FB4058A20B2585A74C45C14FFE076BF8D40CF5C922E14A3D34325B5909729C870B36BCC17964590E51CCDE66B1425ACFAFBC5CECD10FB168005C04C65654B7574150F18C2362F18136A09CF12029BA371E008029B4B631021A252E756E3BC40E41030A3A2A52205A917EF4B0A66A8279A8B67309A2D35460085BBE18F221BB72409F004A894BA1AE2A31141389FB963DB3F0C0DA0A179FA30926DA2D817AA6FFF02BF656716AA87F7273B747741CBAB3ACFC112D3942C193DC32A31A2A0425854206B51807C960D93D6E361A5F29A6F15A417FD01D25E264C322C8696369FF5397EDC52D6D388BBAD6206729BA14D7855DF4424AE9C48AD11A19AAA2F8FBBE50BB6AC1208385E80C740C916AB540504758F7879B0D0B5B36C0053E564E15017E563966EF0162966B0A6A330A4079C9D01A89B43893E38C4064A247B1F98627EAAB80A1603A43C01FFC5D63DCA4DAEA501379CAAFF77BBF0C238B091318548168F4033B83A2D2C6026AD2973BA43C01914B27DC248805C762D980E7B427252B222DE59698BAAD02936E1135704CF80F531C13FB9828D1199762794B69762BFA3134BCA20AD4F799CE0B5F27586654D981598172E191B4B556457B27C1CDE17B2A9A4752466439693622C68DF2608CA84B86BC553CCCAB9D9C842387B8764C946917E26409DA1C92122273AB6124784D8B1475287A3492E2A90D770BDD116BF0FC0460C56A07D86DB686983A052D7E01392C5B34F8DB41D339808D2A9AEF44C845A6B67688AB74FB1218E7AF9D172DE406BE0A32CB40710FC33098B82A21AA719124EA3D12A28E87043AFE9B56CDC58534BB38E497512CB939CC3CB4D7D3ADFB2C9F4DB11100D76A77BB2CFAD308F3171AD0478411009B11E964D1721A1225A90A285073445B9E389F72B46AACF08EC5DB33F7E038D4CB4C8FF023A5D8BBFD543BED672ED38927807B285B0C3635A1BF554729EA595595C1A1718122821C446E72BA7C5C95F3CAB365B27CE4A283C745386F260320F56815A9704F4C2718D89F60754BD65434A65063665B723033AD8E2213B1562EC9296A370B0C8D5497691718BFFA1F65E26B3709B7A632945B592FBEA90588B0BEF3877630212DFE76792B40A0B4E173161AA641119FAF78905A7C3E59E3686A0B1654E48AB9C22D18BCA456D553DAB3436EE677AB7AB9ECE7416B7A90921A8742A9269742616BF22572A2C8FABBAFCCD1441E87C9AB64593AE50A5C9564834A08851462AFA41A3DB586D49835CBB8A5CF5950B85ABE5D1A64F8C82129AC488000474E5386B3429ADE528345582A8185010DC39D0DA6873D29BEBF3954A56902AC623ED9577103164A839B89BE158CA639C1EF483902A3A1AB1513CCEB62DEF158D0078593321EFFA057B0A17C854956A73C48D55C3B1511C4B43316C95C18FB784452DC4D2C904D30206F17B4644A755344462A034C3D55F04DE42843CAD248E256C2616A98D61024B1D9547C86B37625484C3373E0B786B1220C7EC1A3E75715277C014AC81FFC7A80135B90A9D65DFBDCB03050756ADC26949B1644BBA4EFF133BECB67FBA996C4958DC49C5824B8824433AECBE468DBFB3D46289F65B6528204BE31A8A22B828EA30766CE086E380A6A94EC119C3AC9005D2B8BE47AF0FA2E7C008B06C7CA9827B7E6A247A75717954726E4D96EC82B7EBD469F9C646612C2A785EC3EF1CB5CD5A76F7D006418B19FB3C8254A381320984D03F62244C72A55AA19F60A63EE0B900BA56287235D1D480E752AC905A57D3C99B7C3210E103C50FEC53E430926CC108F0240CE4E3A5116645B5BE79F03AC0D378B00FDA6206C5C5CBC551851243E8EAC7C7B28AA13592FF38065D6F8B73A66812AA415CE44162476008288AFAF1A02B24174A5B00DBF520CB9E3783D482E03CA3166D40D082A7BAB664845B617ADD98C07C6A3C3204F812035683A1D4F10AC1DE764706CCE96D75832A462A8B1B82CF471CBF808A26508D9FAA543F2CD980377D6F794367938064B6DD388C529756963B12CA594B306AB3F0EBBB6ED47601AEC1074A2B0D1B41717F8C695F174EF734052077E53DC9F47316B6608B7EDB54EA3631A36BB8D842CAF27367C15C18DDBA7AFE62AA572133384CB872555948A165F204C2CB4503C9D8ACE5F5217194A67EBD2A72F99562F98B2B773B6965C071BF11DEED395BC153ED6967492D88D5EF32D05E008B7958A2F36B9DB06CCDC52A626417966B19C5079A9892BA426A0362FB18E7EC07FFDC0C5DBE264DEEC41BC83A573599A25A8909B2476682336CEC9A396201A000A9C1BE792D9988FBC03C24855C1B242AE27A127CD36415CFB0D98CCBB9BD83AF5988D743773ACEA4201AC935E7CCC46E92D8E84A9D70CC626965429450980E0782EE11CD91169CE94BF89C14EC10B900EB4B77129A859039AD1253E5657B261E9855BC4B0F504C478D58F4A388215A0715168109526C2DAC555007C66E10B79EB92471ACC9A640805BD947EEA45B66A2C02D5B7C9029945B581666D470CD2654EB51C3304AC52CB11382B8628553B63742C41B293467B754DF8F52A7B9A5EF2359BF34025A9318DF92B1471EC529E895814999C551356ECC9CA945641067B16AC04B4169CC2F8A3B9A005047AC1AA4DF27FF284C7AB19A800629B5A85B06834623AC018D2E4CA1CA197D7B458C185BE0BA9B4703811F8628D13B690602544BD69AFAE215F5BDB51315CB570D48D8B55120D50560E59594C8B5603FBCC7E484EAF591070865FADD495C4D67BFC67CF1CB94ACD50C8970A226C0BC0FFA186BDC51DD235AC8D085F348374C88C6206E147233104306916E30635F0AB1B956644E02A4EE2BCC3246088D3D570A617A63150B32BD50DAA555DD6BB8B6D34C0CBA83A41C23B48B39708D7578D33C5A60AA28430CB10BA264D158ABFF301A00732BD95539190436AD02F89315CE921499C04305D81CFB7997ABA4B2D65639A34901B67972C9A2355B5A10E91F955E0A95FF33A21FA4A8B8E018EA6E43F34462DAF95A29DCC719C2B7EEAE50350497006F6AC53D28FCBF90845B02A8846C58D6494C0C603283476AF121767A9600C83A9E92B8D7B19C2680B1948044B807C9EA7EC94BE30CF3AEA676D16159FA3BC97C055ED0A439AF5C2F085BC0680A5DED6820843C3D3F65138E5ACE48C7A0C11037161674826084FD9BA3113223F18564A9B8DD98472D1837AB85B66E2C2638A4A8D9DD6C361BA6B86629FED9B6E76DC75B258908B750117E8A4763A1C0C0BBE5E2616C5D55B60720371F06D63893061FA6B3C76A600179B52F0C319F47A10189A0F566A7292C40CD9980C0112F265660C3B4F60736A9693454A7B861F834D35B838F8A647771630BCBC1F23F6AA887CB6CBD582CC2240CDBA864167506A43C434C27EAD754484D232A83BC40C2218306816030A20765A5470217E5B2C90846344CD8BC2C498B770E83CD1959DC152BCCB4ACEAB36ABF7F3618C1247F5DB201310C0A1E574FA547C398CC5A44AC23685B64D07B8F6614016C4271B71C650A8B520A5AFA08BA04EE51646B8A7FB652D3AF57A4010558F856FACC9911E09B332C5870EDB61E8E850BB1949AE5755C1FBA2CC472073029FD6542BCDA71B7952BCF811608F2A88291A04F2664BB1112E27B1235B16C19203214E79145A318C5110152DA36BB21ACA73801185D6B8B1F6A344B33B3E550FB5DC29BCD19846E84074BBC8F7580CD347B52F12A7D1616C55A2CD1F5C4AA86702DD530FA05A641302A16127468E85522E567570B65FC3F834D85A20973A0EB2B210D5812CFDFB881CC3AA06AB4CB77BBA7CDC6BCEE53C020B3343B9BD9A8298AD2055EE1A6070849140A86288721815C79734773F4097CF4741CC9635A30C8100B20733D3980B350393FAAC4CD0E66E4737C681DBBCC8D7953FA77454C422AD870E278B1121C33C8273370E5B686A6AAB17FCA3B67A3040D6491241BF5E3072FBDC1E422413FA5B4E9EE91EB3C936E21A5C7856942F44A55670A688A69E91A9A80BF4094C301DF705334DACB0CD929473829F34F37947D22B55C062F4CCF703EE3C1CC0BA7316DD658E6B6E0815F8FC9A70B1BBA325EC32E293091688A8FD05CD6DA066D2BAB105299B3EE66605BD5A803760AF56A6033CB9D3B9240A064D6C06CEAB73E59CFCA9FF6402255A326AEF1E9CB678BF36929DAFE29A58",
|
|
},
|
|
{
|
|
52,
|
|
"D19A3DBAEB91EA7B11C5C7AB16F7A5EA6B4CE44CB18462B9695571B724EE13AC7A98EA318AD1E2705F20B0740794C3E711121A00600D00BCCCC78CCE024A9BC1",
|
|
"FEC8058988374DCA0726E72BB0237C5E59B7AE13C1DC34187062AF43877016F6272E370C1AAB06E12C1C18ABB01B2012F0E79849B802DFB8A4D713991D1575D301B605E048DFE96ED7759216C4BF379B8B6605603409210A809F01EA4A8C83ACE95C7EA6B6917D67810E22156C94705D1004D16492552713917830D9FB1571AC07264354A6A1B295221B7674138E011D27B4448A8822B7600DDF2B1CB2B6622BF506D19061C7A68661329AB095A525CC415006BAE29CBDF549423411B8A2113153155B3F12169952C9300A8C45A942DBDC9F27AA45711A26CDF702BCB3130E48A23EFC0BA9CA12F5F907B0274C3AA23F129A231E1549106204BEB88D74E35120568562D66140538B61520A8ABB410669B290A3B15249BDBE14A962144FE579572F109F23F04A54E87A79E74199717FBA90213CC38A6E854ECC14640376ACE0AB8D24799115B54CCBE4A3ECB51A7EE101921BA1F9C374D90188BE79016111108999AF0904CFD221496E6991780B9C50733021D5844E4207CA8227EA6C6F8B14B92538CC6192159031B53F9896A239A5F3954FCA6C3B15A84949703EC720462371985B13BC12945824DB5CAAD17C92CB97C9048C83854113B0112FC641CE1157872703B519276AC50D2BB146A85A41A529137386AA0103BD7E5856CA06950A398B07B974CBD44030559B8C9CA1BA12387726278E09C9CE5A201DF6A9B0811249A6B7914C45D6B3A8ED7436AED3CEFDAC91EE8568988C0BB61AA7A4C6B245B6478718A90EA007E4D9C1E4654AD8BC6DE7F0BB5A7695C2076EB9F56E4C338ED02229719A9D8ED53E983B6A797372D9478D1534AC10B92373CA240D5060136356D72A5296A88F78303199F28EB635BF33B9C92DF074E2B9670EDC86E46380EB98BB6EBA5FCF282425062A97A579FAE6BC86C92931F531B9B98EA806671AFAC44EDB65EF7B4DB4894AA2B64052E30346E80E9E34C567E36361129281A25524BB6FC865A2BB0076F5CB7038C2B9AE6BC7012729C2476887467DA5E60958C384452703C8550413C141CEF9882F37C893664DFA32232532C431DAB69A3767A3810E3F778185E396EFC8B02DD3158A0354F5499783A01AAD4455D9915AC1D20F8AB56037356AB7C51DF4B52E3F6B3EB713A3FEE23888FC9D9096AA9E4884F4E9BEA8F33BAB6BC6D8764C88D84B9CDC88AED4B335660823E14FC90467B995094014A2F5FB6A6DF76B8011BACCE86450CC46FC6779E763BFACE069E5327F994618EA23AFE05338F02885FB4524E2D47EDFBBC890514165F39FBB72286E8CC2D3624655F194812B790D714A2E833B82C4037EAC8698ACADC3B2A2815C15329707F205BC3B7C71D864839BF406F24B9371C9A63664C39A03202D630A5D1762C16642E874CCAEB90E6F312822085DB8B7831291563C1C4A4131543C014EA8F3092AC2877CFB72B67AC1493C4439379306F601A2ABBBAECAB12CA83931C8363EEA04043790DD429D16874C4EE0351B482C85C893C9C9363FB81A4AB8C49426B8396A1D2AB331E7A4B5C20A5224E1791AD9059F78778517537C4115D9F7609C956765DA280A03864582C9355584042ABBA986B3703248F2C183F27560E265318F3A7C6395C8CD35B515661CBD697039992627E4404862469592B71D9069A1AA8F72176A311A241AA9493CDA2F0B5373BA78345E11B396863892EB5F13DB117E1B12162A082D53789005164D082CF2227956C3B7D9F61494859A7D255E9A415F878CBACF73606F03C6E3D92C29D261E96C4A71AC1C78E93E47E2B803883E1E2B1CBD89159D95A979F72DB5BB39E41666F4E255453B3977361809A10F700039C1F3C1B503AF2E3639DE78B7E309B7310A8E5C9817CD963F1F38C1F5B5A696384F54307E9E60C45B2C14BFC9BE2172907B15068D918EA919626484A12F3C865DC2C7C7F30BF6FA8C3C80992ACA71F1C8A10FE5C586F68F99D2BA5F18C1125A11EBE4C4A8B2B93366805547CA22D1C8E5E6446A77C5BF9170A572AFE74677711CB7A7E85C0D177E2C5017E6E9C028B34B93ACACE87172A4BCC61F30C9265994AB511D8ACC97CEC1B3CD66C477EB91CDA5896A09130FA69C9662B48C16672B3725BE5762D2B1C5904A08F161C27934AC37D4761247A618EB58737AB56B55A5A335704526BC4991433DC88020C41E21A206EAC92788BBAAB1F8D016DF4AB5C27AB85ACC48A190F33FEE0F2F",
|
|
"CC4B670E6ABFBBA78B4B20B58DC5027147398C54737D15CB0538BD326C80D8491EB8AC09C9470C67D1B31F098364D2AC0E3028410BBF01783A36202C9F305829D7A9BC3122F7D9990D28C239920FFFC66969F2AC43F38E8341869551811D6B0F5EF7B62498371C4666DD63A45F181E772113D81203348351B00956A9614ADAA04BAF62423745576F833B22FB95F2F67F0F92C67AB48C2BD9753B157EE4B8C44B2A5EFB8B70832511BB50196D921D5753962A2587484A66B1B791C095615EB84179B410BF7388506A895FC7B44F29B1CB50AE206B08BE3AB7C2B6B16FC466A8F8ADABF0C1330C67438018DAF169C5F6CC3DBA31C6C0B786B1AC083484A8E785337A009F082C316C58D2B105ED79211E360B015C770E1586812C500CDC0A2B791CA8995922C90A3017661BB15718B0A79BF69A41C94A2BB1BF9551CADFD85F308738D0361B37EB515B315546E1AA9949BC93F5ACD1365A26B1467B857F92E462C4D6402200C43A5BC6706C09F1550248696425373AE5A5BBC5E3C5D9B51E6738902C19945760C0AB64B6A09984E689C43F1C5BBE795BE1A0A72AB39EC5614814A409D5A82D148BAE4EF8AD3DA19441FC149EA6A658574472DAA76AC97E537A152DA84BE2A8B3F3E66FFAEC3EE9323BC8FBC8F80214A4D692C972421E1452630B8E687931D6DAB0996B60FEF0A3B801ACBFF2CF3E68A85664B5E2E85546041AA76758EC877EF1D2B376BA77329A1C1A95C64C8C2F23558B696B833BE912AE3C81C3D6896B662C2C1A79E914B8C4D3557E40557749C834B20B49BB50E1736D9943B9F8C4CD0D7C6C7426BFCBD05E9DA326ECF094D4F4754A003F3848AB7D83BF045A7B767912F90492A9847A9DD7098CDB4DF98A2C742668BC47B0597409AA11A311794D9CD7145189351FA9385E694B4C336FF482CD00FA35F8A0C670ECBF8406CA9082429ABA053E717700DC5F09E65748072CBB612C0B4261A9568E409958AD3BA77DF60FD55649FEB6C2EF7937611C7D3C6A8FA293A55F0B8CB5F1A5262B35A437B467132142431B908C77ADB09592F9CF58E428B21652DFB18A51E373640866FDAB7677E84BF1D84B733C258A812A0D82B841C232DD2460BF8003CE0990DF60A32E90783BBA556EC7802B3162FE98A070398E6B6A1D2EBC81B0D3639A817D353A349A4C4ED9CA8E8E357A2E081D5F9A8B17A711A1522DCE09822999349C6C7C92CB3058B516423CBC6D878A770BA695A54CF3E63911D62923AA07DB098E8DB8789E1720F8A5856468943309BFAD2BCB9E23863DB21D9901751DC0B612E123E9BB00C63152E601D007212E78763D949199C9A67A1526CE244276600533CE22B539F96E759ABAA9F11AFC75C1EA0CBCAAD0AABB3ACF34A258FEF020F5E3309E513A05A859694C605938ADB501B96179349BC037038B8B6FAC4700C38BFD5A3F439370EB0B28D4F0418FD08F604697BD7710BAC01CAA7BC75F76C01432045B2375E2A5B499E1A79FE511527279C6A17DFE0AAD9CA354970A3CB67AC584C53635DB672835936EB63DCF827EA762781616822E7C18FFF03643F8C1A4453509A492B91C80CF15A4DAD95AB149714372B6DE2741C88B296859B7B4D187B64B36508940CB415B0C187AF5A924F968579194BE19B637A1A359F4382A04DB2365FC6091F288D7C41031B64C8CC5825CC92C7A38964251B638E315BF85389483A3D750992AF99457AB6320E0B50116B59B039361685825BCA01CB1983BC3A48C43C73BB7C50E43B15F82521505708A2CAA3129486A36A793138C7E4B41DF019CC8BB1C55F3B23BDA2161119941D08636EA2AABBB2EDCA880E36362B1A597C8372602D1103F930362FC76B7561FA72096ACB75533E360758515260827AFF58E214C6B5B2304BC12A3F6B69093536E82C7A510411E54C64BEC75C4B25114F0784D34BB9115B77AB6348B8D4A8921D4A1AF4137A993586AB600C809C3DD71770422B1210AB915D5316E345692F17AE11A4139ABBDA35609902BC94DF50973441BFB789659BC3CE8206F0367230E3864B8F5621A3C25D31B31F8B531B0517D408BB1B97A045AF9686A1B80B329C97BEB14780BACA9CC3BC8C51C3F604062983C7961934C29011999BE803C47CEE4C52CF7996936B903F31C3AF62120251833E0B7687A8027378CFEC8058988374DCA0726E72BB0237C5E59B7AE13C1DC34187062AF43877016F6272E370C1AAB06E12C1C18ABB01B2012F0E79849B802DFB8A4D713991D1575D301B605E048DFE96ED7759216C4BF379B8B6605603409210A809F01EA4A8C83ACE95C7EA6B6917D67810E22156C94705D1004D16492552713917830D9FB1571AC07264354A6A1B295221B7674138E011D27B4448A8822B7600DDF2B1CB2B6622BF506D19061C7A68661329AB095A525CC415006BAE29CBDF549423411B8A2113153155B3F12169952C9300A8C45A942DBDC9F27AA45711A26CDF702BCB3130E48A23EFC0BA9CA12F5F907B0274C3AA23F129A231E1549106204BEB88D74E35120568562D66140538B61520A8ABB410669B290A3B15249BDBE14A962144FE579572F109F23F04A54E87A79E74199717FBA90213CC38A6E854ECC14640376ACE0AB8D24799115B54CCBE4A3ECB51A7EE101921BA1F9C374D90188BE79016111108999AF0904CFD221496E6991780B9C50733021D5844E4207CA8227EA6C6F8B14B92538CC6192159031B53F9896A239A5F3954FCA6C3B15A84949703EC720462371985B13BC12945824DB5CAAD17C92CB97C9048C83854113B0112FC641CE1157872703B519276AC50D2BB146A85A41A529137386AA0103BD7E5856CA06950A398B07B974CBD44030559B8C9CA1BA12387726278E09C9CE5A201DF6A9B0811249A6B7914C45D6B3A8ED7436AED3CEFDAC91EE8568988C0BB61AA7A4C6B245B6478718A90EA007E4D9C1E4654AD8BC6DE7F0BB5A7695C2076EB9F56E4C338ED02229719A9D8ED53E983B6A797372D9478D1534AC10B92373CA240D5060136356D72A5296A88F78303199F28EB635BF33B9C92DF074E2B9670EDC86E46380EB98BB6EBA5FCF282425062A97A579FAE6BC86C92931F531B9B98EA806671AFAC44EDB65EF7B4DB4894AA2B64052E30346E80E9E34C567E36361129281A25524BB6FC865A2BB0076F5CB7038C2B9AE6BC7012729C2476887467DA5E60958C384452703C8550413C141CEF9882F37C893664DFA32232532C431DAB69A3767A3810E3F778185E396EFC8B02DD3158A0354F5499783A01AAD4455D9915AC1D20F8AB56037356AB7C51DF4B52E3F6B3EB713A3FEE23888FC9D9096AA9E4884F4E9BEA8F33BAB6BC6D8764C88D84B9CDC88AED4B335660823E14FC90467B995094014A2F5FB6A6DF76B8011BACCE86450CC46FC6779E763BFACE069E5327F994618EA23AFE05338F02885FB4524E2D47EDFBBC890514165F39FBB72286E8CC2D3624655F194812B790D714A2E833B82C4037EAC8698ACADC3B2A2815C15329707F205BC3B7C71D864839BF406F24B9371C9A63664C39A03202D630A5D1762C16642E874CCAEB90E6F312822085DB8B7831291563C1C4A4131543C014EA8F3092AC2877CFB72B67AC1493C4439379306F601A2ABBBAECAB12CA83931C8363EEA04043790DD429D16874C4EE0351B482C85C893C9C9363FB81A4AB8C49426B8396A1D2AB331E7A4B5C20A5224E1791AD9059F78778517537C4115D9F7609C956765DA280A03864582C9355584042ABBA986B3703248F2C183F27560E265318F3A7C6395C8CD35B515661CBD697039992627E4404862469592B71D9069A1AA8F72176A311A241AA9493CDA2F0B5373BA78345E11B396863892EB5F13DB117E1B12162A082D53789005164D082CF2227956C3B7D9F61494859A7D255E9A415F878CBACF73606F03C6E3D92C29D261E96C4A71AC1C78E93E47E2B803883E1E2B1CBD89159D95A979F72DB5BB39E41666F4E255453B3977361809A10F700039C1F3C1B503AF2E3639DE78B7E309B7310A8E5C9817CD963F1F38C1F5B5A696384F54307E9E60C45B2C14BFC9BE2172907B15068D918EA919626484A12F3C865DC2C7C7F30BF6FA8C3C80992ACA71F1C8A10FE5C586F68F99D2BA5F18C1125A11EBE4C4A8B2B93366805547CA22D1C8E5E6446A77C5BF9170A572AFE74677711CB7A7E85C0D177E2C5017E6E9C028B34B93ACACE87172A4BCC61F30C9265994AB511D8ACC97CEC1B3CD66C477EB91CDA5896A09130FA69C9662B48C16672B3725BE5762D2B1C5904A08F161C27934AC37D4761247A618EB58737AB56B55A5A335704526BC4991433DC88020C41E21A206EAC92788BBAAB1F8D016DF4AB5C27AB85ACC48A190F33FEE0F2F09D07691027DA18E9497800533B1C0E26B57DB34AB40EEB9DBB282827564EABE7A98EA318AD1E2705F20B0740794C3E711121A00600D00BCCCC78CCE024A9BC1",
|
|
},
|
|
{
|
|
53,
|
|
"202326C5E2D0D9212B062E622BD3863503B357A7CBD5DDF9B586596409871A002D7AAF4EA98867A68BC98DE1676863B12FCCC1E5D07D16CF72CF4D4A7764EBB8",
|
|
"A14B70C6FC3A4B77556A222EC5050D387C2852AA3BD06058A38877A581CD4BB425A7190C11D28F1FE63630165AA1743380F77B194905F2023EC86444C51971337A113022122472394028C7E6B51D0DB4762445513ACC7579E2AD69EA634C21162F5B2F3EE29460E70753B397176853CF9A12922B55DACC0CD8067667B76D60042E915B2E9B0C0AA76A87F7CB477A56144A77647BE293F27191BA78BF201B3EB5502318ECC78B29C07BB3012B530395DA719DA70DBF28B18070B0E5FBB0B1DB6E0592C0176397E67C23DBCB9CB78731F3871A4346B5F8737ABE820E18FAB17CD781EB96899F10602C63BF654C0CEE287697D6B4D8AC1116D2831EA194966500B9A4730874A0A9C26956D0848970666FE315820BB5B07741C6B4542CB1B0ED412653C11DB57474F7B70A79A1749BC72E29EBC6FCF09811A260C931AD9782B2BCFA967FF58946F961D5B29151BA148744C128752605FCAEAD65C878F004388B13EDC7542AC094B2FAC8DA68233F5653D7405F403545878738AD6A90B41028A4E6C23D37A046EC53DFB49D94FC9751C23245F9C5D076B6697C3131125ED8C68BDCFA65DEFCB67037C342C7C41C9CB318BC0C23A28E4DC819163B4746D416A719017979ADA696631AA09E4795514F70B52EA65B569B2D0CF02E3CF7452166864B440726D23411607E3991332AA91287D62AA8743FDC28AC13AA34BC6ABB4331CF4600971FF093428817B030364E504F61023BA29B4CC545547F517EAC19C8EFA57087887913A5923C1A597741BFBC119383E90324728147A1251645847AD647609427F9862D2C870DBF655C138C5047C2AF1AA37986608A483717EBDAAE7DBBAE928A15B920C8EF5453CE1821369985F3AB77539A922214367E3A6764C72BD4B555F9155BB29C3F2F6AB77DA92211F45D77EBB58C421D7AE6AD634BA82B6534E5B1C561AC2C540C0259CC8A28492CB8453DC761C3CB2864DB546FEA749E2FEC06DEC0694FFB6590CC5C95A9C5A326C4C70330A07B5E07726D1F5ACCA90A2948194E047997856402BBD357D5D0ABA97CB910E393AA90068ED2A81E02A99D5849F5275C7D6C061BEB364E0B8FDCB2235472AAB8F88CCE557D1EDAAB38830857B60F18F328A4A2A75B281D7D377B0807B6D7A4997696419F166F13CB6D30D5403ADC0C40E0C635588E1608CF747573FFF2020FA612A625B890A840A993067A2A7B658C2AE04223A31244B9574CA983A8350578D3F0A2B1F86F78E714F25B9ED2690039840BEEDB03EB70474E627A589199E7F7B1B4794DCFF308688993087AC149DC2FE7C246C0A0733EE2B39A68A624F79E8BC8CD588917F6266E77E71DBADA77D4698EEBD4AE225BC53B7494C71581131040BEC4218BF6CAED437E7E815D71C95420D82A92305040CC9F24160F14C1859B55855E6178881202AD96CFA9D0893B4CA762C3475792AD49D792FA265DBAB62E95B532C8C35104B170B7A29BC6F6443F060C06B231C0A10FBEDAA5DD63B79DA8AA1563CF450C83AD0BA370CB5D787A0B84D64A456A9F14A06D7FB0893E2892C3E6BD011A6321E62F43184BC040B124E808C6684DBA6434B1745BAD85B5F80C26908800EE43C87787C16BD868C5532064138B0BDB367DB15D1B783859D8932BC4649D7019AC405F4C15ADBBF7227241618B6089A7410CD35A19BAD6C24E3B2B29F134A7F527CB88992A78A08A034B90146B4221BC50E634809B57FD67CB920704CEF590C336BC6194361413CC2D970B07F84247612A8796A5DD5C0BDB445596E7889CF28F954B1190599101B32DF8CA773869AC79D6C9B3082C9D51722BB5B328F674E61B0782FCAF08FC5223BC974A4A545217A1D24B3D10226084F0B978E39F53357988656EED1300AE7A31F8D26150AAC34D46A51D08B80AC4ACF4EA8002A5932B7B9F90E99EAF53CBE1EA8D8B1C6342C3A6CF915296A27869A425B6B20C2C534221799F267A628FF98C389514845C87C19C8A343A25835619EDA20EF8C46C6BF08FF052BA6179AC54824E65190A1662827C1C4CD7B253CFC884408796C607B44AA61D15E989EB479169E980DC920D89FA4F63329D62A4150B1BCC89A88688EACF91568F71A0CAC33138340B2BB31B4BBBEA750313B00F0634B1D97F1686826B12581D415E8A534C41962C15C272045995CBFF625F9D08C8E6848123A612A9C865BC2BC9EB0623E331C99B359E8C084310",
|
|
"EF7412A2D3B13CD3828AAB65A57A308FE675FD3420F9F3AACE358487ABB55AE8AA6D7BB7D326055F387A2C6546FC172285EBB672AB67CCA32EBD005971660EFB4330ACD5672610B6B010C57E242D8FB8ADA752A8D644A34630A655C11F439A9E66426DDB617602F84A46190F031AA4A1A168D943645D0A77C66921A5455B5AE91F2DA47FA99750771331A727AF74CB916E8984CE9440DC74671B3A609F828F8D983BC5F06512883221B5AA7F8812EB5A774B272689493DAFE89C5C78AF0407CF351453C8D1C4B3E076AE462882A4828047C5E55582DA512BC20B0E0D261ABB8080658B9A6BA294251C7CC266527B2B4BF1652566EC5A320812EC77870BFC6F7954C3BCC979FEF761E8ECC59E306D1EBC955EE93759609A43B23BAD38CC79C0968FDB1BC95575D3E2113CF940FE2C211B75373570CC826C8FB77BBDED7545F7F16ACD0703E15A513A9986286ACFCCC02897DA4B399852D3E915C7634CEE146B1CD0645F9ACC0AAB55941B69E00878CF93C2CDD96FD4C6C816A73ED236A298217761800B896829BEC212366258B6C12520E11CA9578655EC36F0281F6A456116801806AA06F0EC124811345C6967F7D21E8A950CE8D7047A28A5B892BF07416C4222824C821464063A4BEC5040C7ADE1A5520C493EE14145E73C8AEEF53BE1DA6DA8D1B73B1A1FE7689DE7521965944A61352C17C2A4FB506B2012559DBC5D87F74189C962C433782BFB1FCB02B3E7F85DF9898DBCF5AF804CCDE76CAA19E28949B910F91B3AD608A9FC707D481B3CA0C05DB38C9DCD6C8DC279CAC38A76D20461985C2F2C73B833122F52FC8B793A4CA2D8C3FF021B8ACC1379818300F08977154866DC5C85B5C03B17056432373461288F647BBD88C98CEB5C0AFB745D7A45A7397BABA1321710133F2CAD797B01A265166651537EEC5A1F349690E77CC1312D0F8456E2ACB1204281BD058DD2BA83FF7848535B60AC8B64E1D3AF46B62B4181368DF198B68A2CAA7A953C014AB7A40A9E789B17A62DB6AB39EB2BBF26433694A576041453DB63B92739CC318A9312644484E834DC0C6A59637A4D0CBFAF4A16FB73C5BBEBC787A02856D487807925C4054FE74787F02147D349AB5A0C1BD2B0950B7B92B8D1AACF371C19D98DC215CD429374DF85151764B24820BD974B9219592AD9262550AA65B27C60BFE63359FC195036387344940B9112903661C77C1C069972E8A503B53770DA419475746E6C8A3413B854F6474F02BB0A024A2B0106AA36041AAC94290FDB398567636437839C39012603355DACAC286B00B0248B4B9ABFB6C11ADDEC734613A87B65846BE1AD9B5649EE4B3770D42BF84241C8742FCBFA7A8F686913C4907459A57F81ADBE121097D5911070415D6B078A4A49218AA2FCB617880A061DE9B6B94B1F5C80A401A91C409439EF6891153A0AE6877F375A436327AD5095BD57BCACC9294389A31F959250EFDCBDA72C5DD5A8488AF73F08838B54A14E9DC22B9CD6725E803810B3B771872F00A4CFD9B1BF62D235B3E2B210B8A08E51C4EAB56C33D22951E1C08BA30C133B0774CC3CC5348521D492CA779EE98B1275A17CD7692FC843C17EFB29357185AD0C54C193140D58353AD73B74A8256D566173472854A2066B886C59D350F1605589B1914EF97FB34C2539C7995C5C759C5CBF589B263F839041A88C37933C251B15469B4DF5797E7B7B603078C063C996DABBCBA4CB24B29596FEC030E46BCF17B44E78F68FFF16B77709838B5C56D079CABE851DAA94B28D304DC251847F474ECFE72A2A66CBAE063BFB198D847C20B296008A822317B56665B2A15476CD98FC25834A4E1D424B717562C0D12B776148BD6B7D9BB36C676C2F88A6AE0CF1AE027ABC672729A6D45372D579F98C23EE698ACA08535189C21A9B855EE7B8423371E87B1099566480F15D5AB95BB8E9740C43AEBBBA99F4DCAC05A7B1FA901A9250147BA446D0B9718FA72ADB73640522586719C16E503E1B85CC315972F378CB9DBCAF8E8942FCAA1402A8AF888ABD7C253B74E829DA036B66DC33DE55B82AB606B8E6225C0C7D396C919FFC3357C781A746B590E0C66F7952A80879B34B88AC6663E6979DC3573BCF651F42840ECCE036DF843734704B7FD59A2ABC0C2EE63138206660980429824630729BA14B70C6FC3A4B77556A222EC5050D387C2852AA3BD06058A38877A581CD4BB425A7190C11D28F1FE63630165AA1743380F77B194905F2023EC86444C51971337A113022122472394028C7E6B51D0DB4762445513ACC7579E2AD69EA634C21162F5B2F3EE29460E70753B397176853CF9A12922B55DACC0CD8067667B76D60042E915B2E9B0C0AA76A87F7CB477A56144A77647BE293F27191BA78BF201B3EB5502318ECC78B29C07BB3012B530395DA719DA70DBF28B18070B0E5FBB0B1DB6E0592C0176397E67C23DBCB9CB78731F3871A4346B5F8737ABE820E18FAB17CD781EB96899F10602C63BF654C0CEE287697D6B4D8AC1116D2831EA194966500B9A4730874A0A9C26956D0848970666FE315820BB5B07741C6B4542CB1B0ED412653C11DB57474F7B70A79A1749BC72E29EBC6FCF09811A260C931AD9782B2BCFA967FF58946F961D5B29151BA148744C128752605FCAEAD65C878F004388B13EDC7542AC094B2FAC8DA68233F5653D7405F403545878738AD6A90B41028A4E6C23D37A046EC53DFB49D94FC9751C23245F9C5D076B6697C3131125ED8C68BDCFA65DEFCB67037C342C7C41C9CB318BC0C23A28E4DC819163B4746D416A719017979ADA696631AA09E4795514F70B52EA65B569B2D0CF02E3CF7452166864B440726D23411607E3991332AA91287D62AA8743FDC28AC13AA34BC6ABB4331CF4600971FF093428817B030364E504F61023BA29B4CC545547F517EAC19C8EFA57087887913A5923C1A597741BFBC119383E90324728147A1251645847AD647609427F9862D2C870DBF655C138C5047C2AF1AA37986608A483717EBDAAE7DBBAE928A15B920C8EF5453CE1821369985F3AB77539A922214367E3A6764C72BD4B555F9155BB29C3F2F6AB77DA92211F45D77EBB58C421D7AE6AD634BA82B6534E5B1C561AC2C540C0259CC8A28492CB8453DC761C3CB2864DB546FEA749E2FEC06DEC0694FFB6590CC5C95A9C5A326C4C70330A07B5E07726D1F5ACCA90A2948194E047997856402BBD357D5D0ABA97CB910E393AA90068ED2A81E02A99D5849F5275C7D6C061BEB364E0B8FDCB2235472AAB8F88CCE557D1EDAAB38830857B60F18F328A4A2A75B281D7D377B0807B6D7A4997696419F166F13CB6D30D5403ADC0C40E0C635588E1608CF747573FFF2020FA612A625B890A840A993067A2A7B658C2AE04223A31244B9574CA983A8350578D3F0A2B1F86F78E714F25B9ED2690039840BEEDB03EB70474E627A589199E7F7B1B4794DCFF308688993087AC149DC2FE7C246C0A0733EE2B39A68A624F79E8BC8CD588917F6266E77E71DBADA77D4698EEBD4AE225BC53B7494C71581131040BEC4218BF6CAED437E7E815D71C95420D82A92305040CC9F24160F14C1859B55855E6178881202AD96CFA9D0893B4CA762C3475792AD49D792FA265DBAB62E95B532C8C35104B170B7A29BC6F6443F060C06B231C0A10FBEDAA5DD63B79DA8AA1563CF450C83AD0BA370CB5D787A0B84D64A456A9F14A06D7FB0893E2892C3E6BD011A6321E62F43184BC040B124E808C6684DBA6434B1745BAD85B5F80C26908800EE43C87787C16BD868C5532064138B0BDB367DB15D1B783859D8932BC4649D7019AC405F4C15ADBBF7227241618B6089A7410CD35A19BAD6C24E3B2B29F134A7F527CB88992A78A08A034B90146B4221BC50E634809B57FD67CB920704CEF590C336BC6194361413CC2D970B07F84247612A8796A5DD5C0BDB445596E7889CF28F954B1190599101B32DF8CA773869AC79D6C9B3082C9D51722BB5B328F674E61B0782FCAF08FC5223BC974A4A545217A1D24B3D10226084F0B978E39F53357988656EED1300AE7A31F8D26150AAC34D46A51D08B80AC4ACF4EA8002A5932B7B9F90E99EAF53CBE1EA8D8B1C6342C3A6CF915296A27869A425B6B20C2C534221799F267A628FF98C389514845C87C19C8A343A25835619EDA20EF8C46C6BF08FF052BA6179AC54824E65190A1662827C1C4CD7B253CFC884408796C607B44AA61D15E989EB479169E980DC920D89FA4F63329D62A4150B1BCC89A88688EACF91568F71A0CAC33138340B2BB31B4BBBEA750313B00F0634B1D97F1686826B12581D415E8A534C41962C15C272045995CBFF625F9D08C8E6848123A612A9C865BC2BC9EB0623E331C99B359E8C084310AA4160315EA4DFA5FD51510A38B58E651C146580B75CBD45DBF7DA19DA6E48FA2D7AAF4EA98867A68BC98DE1676863B12FCCC1E5D07D16CF72CF4D4A7764EBB8",
|
|
},
|
|
}
|
|
|
|
func TestKeyGen1024ACVP(t *testing.T) {
|
|
for i, tc := range kenGen1024InternalProjectionCases {
|
|
seed, _ := hex.DecodeString(tc.seed)
|
|
ek, _ := hex.DecodeString(tc.ek)
|
|
dk, _ := hex.DecodeString(tc.dk)
|
|
|
|
dk1, err := NewDecapsulationKeyFromSeed1024(seed)
|
|
if err != nil {
|
|
t.Fatalf("case %d: NewDecapsulationKeyFromSeed1024: %v", i, err)
|
|
}
|
|
if !bytes.Equal(dk1.Bytes(), dk) {
|
|
t.Fatalf("case %d: decapsulation key mismatch", i)
|
|
}
|
|
ek1, err := NewEncapsulationKey1024(ek)
|
|
if err != nil {
|
|
t.Fatalf("case %d: NewEncapsulationKey1024: %v", i, err)
|
|
}
|
|
if !bytes.Equal(ek1.Bytes(), ek) {
|
|
t.Fatalf("case %d: encapsulation key mismatch", i)
|
|
}
|
|
|
|
dk2, err := NewDecapsulationKey1024(dk)
|
|
if err != nil {
|
|
t.Fatalf("case %d: NewDecapsulationKey1024: %v", i, err)
|
|
}
|
|
if !bytes.Equal(dk2.Bytes(), dk) {
|
|
t.Fatalf("case %d: decapsulation key mismatch", i)
|
|
}
|
|
if !bytes.Equal(dk2.EncapsulationKey().Bytes(), ek) {
|
|
t.Fatalf("case %d: encapsulation key mismatch", i)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGenerateKey1024_Success(t *testing.T) {
|
|
// Provide enough random bytes for d and z (64 bytes)
|
|
randBytes := make([]byte, 64)
|
|
for i := range randBytes {
|
|
randBytes[i] = byte(i)
|
|
}
|
|
r := &mockRand{data: randBytes}
|
|
key, err := GenerateKey1024(r)
|
|
if err != nil {
|
|
t.Fatalf("expected success, got error: %v", err)
|
|
}
|
|
if key == nil {
|
|
t.Fatal("expected non-nil key")
|
|
}
|
|
// Check that the key's seed matches the input
|
|
seed := key.Seed()
|
|
if !bytes.Equal(seed[:32], randBytes[:32]) || !bytes.Equal(seed[32:], randBytes[32:]) {
|
|
t.Errorf("key.Seed() does not match input random bytes")
|
|
}
|
|
}
|
|
|
|
func TestGenerateKey1024_ErrorOnD(t *testing.T) {
|
|
// Simulate error when reading d
|
|
r := &mockRand{err: errors.New("fail on d")}
|
|
_, err := GenerateKey1024(r)
|
|
if err == nil || err.Error() != "fail on d" {
|
|
t.Fatalf("expected error 'fail on d', got: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestGenerateKey1024_ErrorOnZ(t *testing.T) {
|
|
// Simulate error when reading z (first read ok, second fails)
|
|
r := &mockRand{data: make([]byte, 32), err: errors.New("fail on z")}
|
|
// The first 32 bytes will be read for d, then error for z
|
|
_, err := GenerateKey1024(io.MultiReader(
|
|
bytes.NewReader(r.data),
|
|
&mockRand{err: r.err},
|
|
))
|
|
if err == nil || err.Error() != "fail on z" {
|
|
t.Fatalf("expected error 'fail on z', got: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestNewDecapsulationKey1024_InvalidLength(t *testing.T) {
|
|
// Too short
|
|
short := make([]byte, DecapsulationKeySize1024-1)
|
|
_, err := NewDecapsulationKey1024(short)
|
|
if err == nil || err.Error() != "mlkem: invalid decapsulation key length" {
|
|
t.Fatalf("expected invalid decapsulation key length error, got: %v", err)
|
|
}
|
|
// Too long
|
|
long := make([]byte, DecapsulationKeySize1024+1)
|
|
_, err = NewDecapsulationKey1024(long)
|
|
if err == nil || err.Error() != "mlkem: invalid decapsulation key length" {
|
|
t.Fatalf("expected invalid decapsulation key length error, got: %v", err)
|
|
}
|
|
}
|
|
|
|
// https://github.com/usnistgov/ACVP-Server/blob/master/gen-val/json-files/ML-KEM-encapDecap-FIPS203/internalProjection.json
|
|
var encap1024InternalProjectionCases = []struct {
|
|
tcId int
|
|
ek string
|
|
dk string
|
|
c string
|
|
k string
|
|
m string
|
|
}{
|
|
{
|
|
51,
|
|
"39690870B765DDF5A0B7092773EC1911637E8A80307A865A24E3012FBACC0FD431D12A44B38CC685335C858714026187E8F641933291CBE0B678D78944B17D7DA605DEC011B8681E113701C0074553156EE11530A4B63B8FE886637B524DE2733D039591230CD90C1EBAB61E3A5762E46B4E6067C6C4B280F371A3D8BB6839242DD3E381B41A3624396C2C557D1809934A901D8091731A43A32DA32EC9FA860FFC4AD09022B944C654980D2F928773B5BBBE048A21DB3F67167EA7F2B156246014ACCDC24455F5D1B0F7171D29CAA43DEB1CE32513078B495AC09C9B6793497BB593570CF8AA2D1F7549E5D54FA5A339B4281C90D75A9D0186B7322129B90B1DF6A39892C60A613D55E4A46EC07B69B6AF96255617C77951958A15B71DC48075562A236AA325008909CF75993CD58AA81658750985FA593EF6C0400BA07BF119C7380B1D61751A4390A398B6205A6895A857A463EC931FC262D89B069D6CB3AC9BB4E5272F35CA612D8346B65427708186C9422A37332B9955BFBA7080454CB5972397839B5465219EC6024D08A46EC4B29A15249653F413FDA1C99E82C144E7BCD9E17C19C2C3D43C4792F91EA4D8487567392AF43A513480975959E50CCA55DC89AB0A19A313B1B7E6ADBD7A1477281BD128B2C0F867CCD13877248E5844882F48B878E536D5208716F11B75051033E9A30DE9AFBBA66305E1BA265686B29C3186FB3CA1952936FABD2EA931E0D74E4D849CB685BFFC38C9E29559DE6AAF2EB4017C543EB9D59732B421C3A5CB5781BB60F1A953F07D7937B3651305E1D46E15569321721E310494C2EC16C843B3B4D9831809065BDA8F4E5A17E80123312C065C03ACE623AF5589CE361C913BDA355A031E42C54EABA24AF3F6848E6C4932427AE2A09D25808BDF0288D4C245EA2973C261CB29A6AFB13C6058A3A19F11673A198F86A251113837CDA27F2304A1E3D75C8BB88E6C67A006CC63DAC90017B865DC0268EFC53E2CB75CC6F1008B34839CC80B26A019440C0D34132BC4690519131DE15434B730B3A2492F6EF6471CF1C5568463A3387102135EB1A8635F0A63E33176914B40CC2494002C0E19C38A0D97C0CA5632261519193030F33ACEC68125D33C5AF26A9F97B1B181A00E4E9144A2D4811D7654F9B958CCE126E030A7FEC045A0BCB82ED40509643F3F5736B652116A4008EDA65FA1895EC82390C2713B4303BB6E7B4B416429D8ABBC497B98907224D065B3DC5A017907BBF7079E08B770AFD059A31A30933580EF49B5C48B0ACE675697D6B1041992DB62246092376954980AA03DCFCB5ADEA36B0B2138AE349D5E270F0D83640BE9885CC9371C6490C1F39959C9A192E584DFF9CB2D8C2297B117B9D7627AC5B2D29335558718A5A7C34564B0C0A1105F0A00E0084ACA185C5A54741E4B4053A431713678F5951D3FE47E0719A082017AB73B892EF3C77ECB170BF386AB36C89876BC8AE67B0CB82EE42793D9D7435172043E8CA3A8E1A83197891121932A0AB2EF46789EAB0BEDF5A5707A4B10035BD331B01E298370E112443A48D96CA9503832E3495DD2E571374C1F57B6B9A0A074AA29736C488FE1D823662ABD3A379CA43007DE317392D332A6826ACE381AF4C82C31F7C781788C705C4E6F06B1488850AAE55B6872731570444DB49AC9A53E9635816C1C537D2430F922124317592B36A68685859EF334B2782A5072A661C55C39294975572319474DB4E33DFFDC5E88ABA83B6B8D468753C88BA898DB116CF0415DB41C17D346462BBAC4A44207D0C93A4B71C8D00D47B969C690ABB371C0BBE1A367A3046643C466C867E341805EB435F8316358F69E6A4976BB54ABD90AA963B52BDFC93BA27C833BF5CCB4A2CA5BABA12D70016ACB875582416BA1A82246CAE8489647B36990F9128E350407CB614C926E492BB6D78021E73CB54641317FF282B9436462183B9375A5D32879355A96215B31ACE09C93779240260EB8B974FE049407229B808B7818142C3A071CC5561F56593E7605346C63817FEB0B836ABB786077BC7A7E3511275C160BA9017C57774E9503048C29B959F5C9E354A8E137CD72C873AD1978F69324DC282504E0A221FB1B740004A63AA7A2D33E00BD0DA29962B8F30233C78317F22CE7D068F16C1722994225E800491E05723201D81BE63E10D05502E1FF54580492D7DC5682EBF09E85773B4E61",
|
|
"042C24A9415FEDEB4932F34EC4D30562112740E60221697FFECB24DA0888D71456CD7924E9669DB01511EBC3ABF6EC2C291146FDC90ECCC3A270BCA938332D1A09019CECC35F8C7F8FC419622185D5B734865C2DD4A634D081B098EA311A029169C973B643C062CC7E31D73876731DACF830955A7F73B9BCC9D6B6AC4168F747885D3A3C01CA4AEFA20EF5B55FB176AE90939C12002BA9324752AA2A1DF78F3A6834FEE50B5165A4AE0BCAAC06BCC6A99E94A69E81E65207F52AC11088ECBA901612CE8BA67788CBB69D137479F3A7FF2513FB8320CA946DDCA952D63A67A5A0AB295249C76169A5E09915BB7DFBF2C876C897463C2B9A973E5906C410D7A04FAA0D2813C48CC5BBF733C4A706139A1990FA9B1E78A98658364250837B34F8120746624AD67C2FD8C5D92C3A0FF300C094988CB077FA65547E55940357AFF18266CDF511E74069E4A85797564800D377ACE053FEA919BBC64869355F0618813E603C1E5B552D624D37924D64B83471C6186EF763E9F319CA41009133360D45CCFB3C8667D3ABF1EA7CE4393683EC9EBF88B3CD3C3D30A6BF66D831FE235CB7E95AE14321FDB76EA59345DDC21D4F6C5D7F5105A67C9CDD6818F07223EE97518FA666E526A0F489677B004705770E5F2B68AED90A1E69C54BD0A6901C766B3477C1DA346C95217F5B8A4475B2D6C0A7B2708A4F519EECD1A67B6A3765003C1EFA308479ACB7584B4D389AA0F3200578C2836AB4AB532686793BA9C078A1EC587755C6DFD5B7EDF41684A3465CAB3D0DE80E7B83C16E7953C7BC7A313B2DBB68B204EC7669730AB3ECAF610C9158230323A86A4B8AB0172A8F7E92825F8C7F1362CB4CA4A4ED1973C1D620120A638EF88EAE78C11F90B0560809591293A3DB5D5409CE3C38817D1C917EAB8050E8C69AA6C8F33178B01A9E6CD31DB60B15FB7445A4149264D984FB86AA5EB6A77F700E7F5890E1ABC2C715A45B23192BD2794ADA65BE8835F2DB9563B32D64B65957224DCE30726A6368AF7A3E016B7712A4671DF346173411EF93119B071AA19767C64474DD317174C1047CE60155967982E661BE441C9363A1CFC33C7CA7CE6A620CB13879D75C92E322C50C9C0C6A041492EB5ADA1B267FA0138B63A3EFD8A2C3F9330CE805F5516065230E2B9C89A2AC3BB0C231F0F8A55265CD143C22DB873FA90068027A3E21275431922FEC6AA8E5F544A3389F8CDB051EB849C5250D27D63D8F398DC2A172E8016FADB223D47B9DD55BC01230400995B3CFA51B16C903EB8B4E4A9704E748006CD1710925B75000CCD5724F3CD81BC68C9364E36BFC972842274DFAAA2D85816298C51B656092522C895B9B1B19399A1FB28B4534952D51C6EB16CE12A16838C64EBE942C90A06890C3246C1800C0F5633834932744B8B5478364D7272F80C97D5A0E19A37E6B182812A0604B5C353274A139DA2948397ED14286F902B5429B7FF5F4C84ABB3FA7E1A805974C89AA07C906109A73C7B1B0582967A2FFF137B289CA0AFA3B07C221750A7CC960B6A679B66AA37373585F8459A7E3725BC718382FA03BD433AFAC481BE5A09B6D2075DBBC9C4CBB92BC915090D503A5ACCAFCC2A360142765FA2599A55DC05A6A2D5300F863BFE7DB0574A102D76C1773A095F3828BEAB7B0B945B19D0C288294B6ECFA551FBA26FB58BA8FF39499ABAC74B990995592CCE5A2EC8625BCE26C4360875B65C1D1831A1854303CE780198551015C2C62F9AAFB70B1A15834D467A642B180BF99393B22774E0B3706421A7AE2CF41281BAE15891E429F74314BA63B02E0A661C2891EA947B7571CC47ED749D70B0595203DD7574AFDD6AEDF8CBE55FA5D495362DD534C37B926EBDA468A48CB701C0565A81994C4AFC599223AC963677C9663211D7B8698D533673E8356C4BB6F77B6CAD027395270625F0A80D5B5A881E61C9553C165F9CA2B309BA7B21CB516392955617F9884A75BC797F1098D226F821985077669753018841A9F290170252771D14BA8FB5BCDFB33AAA17B6032D3540A08B85846212AB0C40430A209A7244420B5A81357FF669A4944291AEBB50ECC3EA8962236D2C4F8CC0354074827D0A37EBCA11292A9D41A7F06D97C37C2541593AF33AB431935CB4522370651A784CC5529CCCA9296518BF87239690870B765DDF5A0B7092773EC1911637E8A80307A865A24E3012FBACC0FD431D12A44B38CC685335C858714026187E8F641933291CBE0B678D78944B17D7DA605DEC011B8681E113701C0074553156EE11530A4B63B8FE886637B524DE2733D039591230CD90C1EBAB61E3A5762E46B4E6067C6C4B280F371A3D8BB6839242DD3E381B41A3624396C2C557D1809934A901D8091731A43A32DA32EC9FA860FFC4AD09022B944C654980D2F928773B5BBBE048A21DB3F67167EA7F2B156246014ACCDC24455F5D1B0F7171D29CAA43DEB1CE32513078B495AC09C9B6793497BB593570CF8AA2D1F7549E5D54FA5A339B4281C90D75A9D0186B7322129B90B1DF6A39892C60A613D55E4A46EC07B69B6AF96255617C77951958A15B71DC48075562A236AA325008909CF75993CD58AA81658750985FA593EF6C0400BA07BF119C7380B1D61751A4390A398B6205A6895A857A463EC931FC262D89B069D6CB3AC9BB4E5272F35CA612D8346B65427708186C9422A37332B9955BFBA7080454CB5972397839B5465219EC6024D08A46EC4B29A15249653F413FDA1C99E82C144E7BCD9E17C19C2C3D43C4792F91EA4D8487567392AF43A513480975959E50CCA55DC89AB0A19A313B1B7E6ADBD7A1477281BD128B2C0F867CCD13877248E5844882F48B878E536D5208716F11B75051033E9A30DE9AFBBA66305E1BA265686B29C3186FB3CA1952936FABD2EA931E0D74E4D849CB685BFFC38C9E29559DE6AAF2EB4017C543EB9D59732B421C3A5CB5781BB60F1A953F07D7937B3651305E1D46E15569321721E310494C2EC16C843B3B4D9831809065BDA8F4E5A17E80123312C065C03ACE623AF5589CE361C913BDA355A031E42C54EABA24AF3F6848E6C4932427AE2A09D25808BDF0288D4C245EA2973C261CB29A6AFB13C6058A3A19F11673A198F86A251113837CDA27F2304A1E3D75C8BB88E6C67A006CC63DAC90017B865DC0268EFC53E2CB75CC6F1008B34839CC80B26A019440C0D34132BC4690519131DE15434B730B3A2492F6EF6471CF1C5568463A3387102135EB1A8635F0A63E33176914B40CC2494002C0E19C38A0D97C0CA5632261519193030F33ACEC68125D33C5AF26A9F97B1B181A00E4E9144A2D4811D7654F9B958CCE126E030A7FEC045A0BCB82ED40509643F3F5736B652116A4008EDA65FA1895EC82390C2713B4303BB6E7B4B416429D8ABBC497B98907224D065B3DC5A017907BBF7079E08B770AFD059A31A30933580EF49B5C48B0ACE675697D6B1041992DB62246092376954980AA03DCFCB5ADEA36B0B2138AE349D5E270F0D83640BE9885CC9371C6490C1F39959C9A192E584DFF9CB2D8C2297B117B9D7627AC5B2D29335558718A5A7C34564B0C0A1105F0A00E0084ACA185C5A54741E4B4053A431713678F5951D3FE47E0719A082017AB73B892EF3C77ECB170BF386AB36C89876BC8AE67B0CB82EE42793D9D7435172043E8CA3A8E1A83197891121932A0AB2EF46789EAB0BEDF5A5707A4B10035BD331B01E298370E112443A48D96CA9503832E3495DD2E571374C1F57B6B9A0A074AA29736C488FE1D823662ABD3A379CA43007DE317392D332A6826ACE381AF4C82C31F7C781788C705C4E6F06B1488850AAE55B6872731570444DB49AC9A53E9635816C1C537D2430F922124317592B36A68685859EF334B2782A5072A661C55C39294975572319474DB4E33DFFDC5E88ABA83B6B8D468753C88BA898DB116CF0415DB41C17D346462BBAC4A44207D0C93A4B71C8D00D47B969C690ABB371C0BBE1A367A3046643C466C867E341805EB435F8316358F69E6A4976BB54ABD90AA963B52BDFC93BA27C833BF5CCB4A2CA5BABA12D70016ACB875582416BA1A82246CAE8489647B36990F9128E350407CB614C926E492BB6D78021E73CB54641317FF282B9436462183B9375A5D32879355A96215B31ACE09C93779240260EB8B974FE049407229B808B7818142C3A071CC5561F56593E7605346C63817FEB0B836ABB786077BC7A7E3511275C160BA9017C57774E9503048C29B959F5C9E354A8E137CD72C873AD1978F69324DC282504E0A221FB1B740004A63AA7A2D33E00BD0DA29962B8F30233C78317F22CE7D068F16C1722994225E800491E05723201D81BE63E10D05502E1FF54580492D7DC5682EBF09E85773B4E61D4ED29FB6EEFC6279C24822EBB0FE9B69246931ED0467352B7E69E79F47CF6EAF36E9099A67947E97C78ADE6C5B36316336C025F16E7335BD81A3158D5AFC87E",
|
|
"FB25DBAFA2CD7DCE979BE90E31179FCCC24AED8A86D60C3B84DD6F701B249AFBEAEE926F05859F818CB356FAD2593B6340B6E59480D7E78E54C54D3178BDE122F0D3010BA5BF2B65468220088DF430E1974416E12BF5B3B3EACC2A3ABFC038460D83257A8CC7F4283C6B3D0070DA8C8BCEEB976C0D708D056F04C86E35B81E99162AC72618F3A39832FB90B378DC914E0732F3140049B149292C8D00ADDD9C0522F3BB1775074AAB4F1E279B5946E88D7C46CCFF453B55621817B8411E24BD0B90BDC275822A8164BA11F9477AE9B03DE7DEA010100B164E02A91F0A27B84B585CC48D4AB84B0A1727454BBE84B1E8B723C2BC7A4EFBFA657F08E7AD2670CDC497D534F307246265C89AB4066E2E1101282A328E00CD1B58E4D23F24CC364CD92F891F4815FFD974ED36C4D29E3C0C7F302F0E912E1080222134ED6C973C8635062F63A39762EC96C883A012F369566B62FA5AFC142E1E284675E7C1EB4744533EEC5DE95AB8ADACE27259DDF76553B482CDB83F1414C66307389F82A51B949AFACACF5E38D677456A8CA1806CC82E3BEA884EDC7B4C5ED66007B143F1A19AFE1A5540FA69F999FE86386FE1E83FC0E57423DF35E82749ACC856D3F05EFB959169CF03C9CB3D11D88FBA1F85979F213FC59F084B01F4FEBD9CB560C0F969F8F021C30644FC8721CD12E2E2BB0014B39D9FB4916FD38C6F8D9B02D67DCDA44332DC519528A86DD5161E8B4C100CDFCC58E3E05763E9FE5E69CC5D5C28E6D2AB24A4BF853264A3CBDAE0A72AA380D37CD0D306770D711BBA1D55A13EE7CA01702556B57BE5F002FDB6CE00DE00CEF2869092803CE44F4944A60CCA2B30978F39FA644A96A66156705EF1E473BF38EAB139AEC783230472CA49D071A817375191B891A9BF63723BF02830D1F443660B33C5EBCEBD8FE04BE4812409E82AD48A21C50C241CEED5126AB40148ADE08E12B381623E5471D173E2722DAAB9085915026088537EEAD054C7207FFA1B68F9CC75DC34D540B7933F78FCFE5728841AF808C0FB9D83F6A80EBCE6B51534370DB55E274B74D216C249759F80D9494EA1FE0AD058F057FE3C72759F5F787B35B13C3FBEC4B730244C0056FE694D801C021DFC1F179FF6BB8435878EAB8936FFDCAD68FFBCBEADD1BACD3A6922759DA01E72AD933F34D10F29D74470F70632A3D6DABA1B069DE9459D15E58AE12130E2414DF92C36DCBDFE2EC3EB17E37393035ED810FBB857D971ECD41347B09C5C8DEEAB060E2759549A05C37A2C93F30CF906A9C59991DA921848363CEB06CF9914E76E1635AA0337A540470C9B3E58D152FE692AB3A1AB5F3E5C72598428DFB9D46E77C32001CC1E942902A4A1CD94D526042D3C16AE79A7F440F06ACC331E445E47FBCEA3AD5B2D4237E320C3DF1FD16CBA99AD93B136D971F4D7233898F1ED5E4017E4DE5B2243E6ADD776C4591E28B6F4A5FFA4AD7D273708D2C7C82BA28A0D621E9A10FAE863750C8FCBABCCF3F1D92E9E2FBD5D3D44B6C4C1A1A73C34523356A8B8DB1B8E7E6AF8B9A02FA03C705DEC578D6ECE7F1AB9C9498FFB1E283142B258342B53959B6E60BD23FDA24A53447049A6F5BD525B6E12DD60BEB5CC7BA0E245EDAEA2489AC0ACABCDBA4C6113F35ABFE30D69332BB6B05DD1430FE9A6AAC0AAE856F0391AC30814075085F8B784439EDD1BCF55FDFA0142424F7A9E0A92142AF3979C3D608D2CE99B9F63F9B3D487471F75D2C43FFBD137487DD9D9A8931D42992261E67FB1C531BC40500711FB83B2AA84C308AD061BE639698F3F2DFDB72864D950F0888A961261BCA7C0DBB78B9BDFB8024A51E3488D87AAEF8FD703A859E538886F0DE88A16AC90D2C596622E34E2E8D9685F918B6BE86AB5E3BD73194A21C9A4DB53FE0C88E027D8FB0621592BA8A8748267CE6EBEDFA75144E2DE1C1B39FB158095F9FEA12772216A718E4729E583B1516D8BDDF13736946073AA71E72F9AA068DD6C3E6D2C7D6BC66711B94BD75AD558DCDD77A1950096BB3922A482FD03B8ED9BA53DEC0083A8B2192848CEF5092D50FF687623A2ADDCBA7D5E9B15759DBB535B6C1ABA01CFB857BCADC6506F0F3E73DD649BC83A05FAA60CBED656F545732E30A838F95C7879D63077C18584E191E2F844D44FFD63C9223D61E38136856DFEF610BD812DA0B8E18FF2465A0FE9F4658AF94ED948B13B4E710AF03D3620",
|
|
"5D537CD0EF7B58F0FE95370473B96878F138ECC259ADFBF77EBD7328B822D9D9",
|
|
"8199CF923CE12126920108569C11CBF97CF03F44AF5CFA7D550E9B2AC7431982",
|
|
},
|
|
{
|
|
52,
|
|
"6FB1B3514251DD374101E8CC62DC4C20899AD4D5722B1232A0B32907726DB6139AB65688FF9C28DDC1387F6537E2E8459C096176A31FF8FC091617006B1C68520AB464113FA33068484941B79922291CC14F123B49D7BC75902B4A1634A0990FCB6612C8D07F2AB8CACE9214BB9145CACBBCC6F548CD97AC4DF928EA459E81C24CE1F8C068653AA4A29B9D23A7A48B9BCAF99A2CCC0A5727456D84ADBFA79EE58AA6CFE4987A2B1D2E201615328FD5AA92FE3B22F23823E99B1F4AFB7C69748ABFB12468D624BC677319C87616071136A56014796863D51F3D913135877DFCE7651F75AB1BA1C00066578B5CC07DE612E19A54FE062182C4B1E19B1F0A4211A9DA401E12C0407B897F3776690A45EDC578830609E31B4AD9D5A51722A221E33E74D1B5BC64C5EEBA6643EB9B32E54A1D4B770DE8C201C291D2E7981E1B9BDA14BF2675527C70664A941E4F4805AF025A069C0368736899F0A2D5FA24D8672A701528E33817A189B1CE655333D84481903AA3441AE4257BE7683735CB98D039585F4C6D842321836875C1A78F247B3D27781826FCCE47F753C88A57A8F39E8766711AD5753C060B7AE5B7EAE85021041306A70960FCB5CD64A655D366D59B703B52A5B4102C5C78B298595F1D7A8A28540C40603F2B42B79052A456E114602A948DF4252C17CC66700728D6072BA44161B05238641EDA15CFF92C4C89C754598615619B4EB2838F64C657A278BF4CA12224717EBBA1A86350BFA2A05594A885B3E61D9CA4BCE5D6B632E214F3B12B658915D2E423FD46686F031D29FAAB04688388456CF58A0BEE7A73CD016CE8B6BE1B762F160894F6D61FAB48915E54B1F919031A293211F4CE07B54C74653991D4A76E2CB68476CD7B121FE7CB80DC44A092864AAD8A12C8D3860473B60A370ADD8B25E315A99B708F80B44A7D01BC3ED4BE7719BFCC5094B9CA470BC0CE9D1A45CC9925BF43B9FC475ABC973DDC153FBB5689D624198816143C054D767CC7FAA0848FA39D0F825233EB2422292587236169C79F2C71375AE43682FC52AA75C815184028FABBC6639BDE6BA41609C27290A195489C81C64A4129252BB056654CC67072BCCE967539554E34383AC56B3FF78AA8A9325BB9314B16795AF5F25486CA214A41B7C383655303CE73F49A831907949141C2944EC8415EE4666F4FBC85E67CA3F15C68B4D23BB0887C2DDA81353C6F21740C08DB187AAAA88ED5B5E618011913534A332DC74C810C47601A4953FDF26DC7738E2BA5A56F45366840BEFE36CA04D20125856F98F28830473203728C4B9038E5CA7291074508CC55997896DB9353CECA7C76003D91E2BD8AABA8EC706F6AF3C9C3BA8882278E6097BECF179946FC3DC31AC8EC36228F49B935A57B1D7B2C16068FD977656D7122737933E84B1FA54AC1792C7219889681985A16012B524B4A92E499B5284EBE093D4DAA8D90B04714CC62E10C688F838E9C028C4D728B1D1ABF9F4240B463BB588BC4BF1ACE20F2C244ECA941B2A491000927670350B81549517866E471184674EF13695770440EB1BD49F5513C10AF5702ABD291925BC6B514963980C33D06FC130BA90BEA70CDFCB9BE6C076359D82A7FE1CA8EDAAEB1DB3130150A6FC7AD894426108B4FD7624E43FC3DC41A98D2E0475F166EBC8A9BD43293FEC14AD1E19273430FDF877C59613EA5D82782212F6BB9886CDC3C51E87DFDEB236DC90BE554C9ADA48D1E21A7BAC91D91C84CDA669571582B4FC17CDACBAEA9B09B6A4AC66405254277C95DC957AB24AC91C65DDED3C05F9B08F979470DA05E652A0155C733452747B8946E8118AB4CF354492586062C56BD2C9AEED133E5BB62D7D7C960D00444BAC4C75452AE0A89807CC450889DA8D96FB50C31C23B05CB8C839B016D3D9800282C0A791705BDF6BD98D8B5BFA94C3EBCB40F764D82C090D9F148B9D47E9BC7905AA3A8B8F122BBC4660D832E4A658430F96423906ECFE6A9866AC134B1CAFADC8589B1327D1CBED20A2194DA90E696250692B5522ABD7A938B9857328501C2DBF05C72456560E5C925FAC4FAC2BEA33A6AB588381684244B58C5D3E7C9D1170C20FBCAE4D6415EF45D874CC301C3A15E11BBACE37082F632EBEA76D8323E4BF54A63880636E1997A47476E8172F8C014DF7B477A631F10EB610CA9D603B73F363AF20BB65D6DAEC6328BA1495D7AFF28D8E2B2",
|
|
"1A344F3BF32049F2774DA2667A562F8A0B477BCAC810B5C44C100C26A41D27C5199D8A99A635959CF9274E1AA3A7B3A871D262F6421C06784DCA9C5AF223214B23C16EC066D800CCEC9A1D8D3962A9109884101454CB91FA3798CA4C23FF213C207112FEB3AA5F5B71F8921110D041DE19C2691A8F6E8503EDF36829679CB57A7FE940ACE127C32602863E000A89A081AB22C8D6FABD514B7DD53928AC22855131547B8442AE2B1866E408386CB9231AA4FE85663243BBFAF00700C410E937CA9532AD5285CD5CE464C09207C2BC458CF5872246292F1BA25B851115D9A721F156730358FFD71CB25689352684C844B3830965D0182C22B7540584240AA36FBA0008548108AEBA3AB118B09C71356B688D415065FFC6875D914728CB5295450604B576FA870FAA5AA2B30C820CB25AF6C06836448C17FB8A2A4A15C5FA2937A5845AF3A9070B1E59A2CC36D21C1134B04ACC8C8F6B72B72981D96A912A422D99C659109514A1D280345361AD567600F3845361782E916D683A9320BA2C41922DB8FA26F1EC78A08ACB96333670D740E046BF02F50C8C56C4AB82B4EE2B7B52E751FD133AC16BC82FE432230CB3929B4B212749CD553107FC4BC5E81F3646645E19C34BAC99FCBC73FE273EA5DB0DBF317D2EF6AFC20A7A62D4BE7B8A6ABF2A1B6E5C6B809CB9957B6276D76246689A788154C68CA00FB43C701B35BD6B7C7AB275B1468FF07BA4C875699896838BD81627BA9C361C55FA2841B76515DAA2CF5E502740E4842ED0CEA45B5F69D8A29E37591D53BEDD1C69EFA41BFBA7AF98F231A61B2DC7A41F10A10D5F746F6A9A67E4E386A58090A90A0A057B43558852EBE4AC58228B298C0D7B832E6761CA34F0A6C5625C7E50967B32B62A933E32143B09D1AC2C574D96CAA291416AE0708CD3A56F6981C28A430112DB52678C44DCD35BE221C872C912E6EA0224F49A600B0BDD0441B144C7789C94799C0F0B522013EB9E55679DB8007EAF1A698FB2C50A929E531407F227A23A626DE96C0307583B29C8C3CC633744752099A1849714205DE32D0FFB84ECEC1B2A23C789F22704300C827C13B58C35032962ABAB106FC77250B812B3525BAA231F2617A2857CBB24FB418E41399244684B9817A77B3AEE0371ED900F39F547974971A9A4A5DF877CD0C731C412B5C22B0077A280ADF701188798ABB79B1D9B3FFBA14484933DC3E7335A45040EF7715F513BD6386D60742603CB369AE067637239C5228F5C538398F62DF7790BB73552A43A3125C97E0DA276D4212E3BD30811A19C59738F58D4A44DD99B478A2A2F704106B58A8FD1660C39B9000D4B22F31A8DCB9A288563CADAB37670333AFC50A4C1A422B8493497CE6A985FC23339A376AB8E04A1D2548D1EE4A840F1770DB2A98968C380619894802F64F713D9D3687E0458C05C2249F63CC2194400B9125FC28B34E685B4820FDA990F187156BC24610509561F0917E56277AA003BD270CD7D41311E66C4FD1A85E3693111897DD9E331C9C595E45B2812C226140A43B10829A9B78FFD166192A79FA566581337A3A38B2DAEB7012106CF7E228C41D32A0C5897FDFC793CAAB3DFF510751C100D65CA5F3C119C0B3B72B10EEFD615B1A79942D7B348991364B3373BB6C5BB86A13F4B7537E05223F397ABCB05F2002758B9BA23233269B8BDCC999DCE208ACA33CF0206954DF77361C89881307DDE5B1FC5796B0C45895A52CB79E87009D94859A44DECF82D4B9810E3BA9F0771A62FEC937432A662D1440F2AB0F549AC3886A9B02144CBBB5C16479328C8B86909AD9941A672E6C2E6F21259937E066AA498195AA2C4A7E7003F476301E3075ED3C47860503E589A487B323C0F414D6E2B53897B17D0AA521DC4A6307359BEB33F7717696BE0040B358555100E56C961338533E0D1AAA71B2FB09B0813D15C1CA39BAD6A320B5652A60125148798E76C300223B3A60A7E6E4649019641A98133B2C455CAC5249BB9437867CDC9A0AB0F76BDCC5A6220F2AEC76267DB2C37A78C26F2F99DDA86CC62976B0F76C60488B950765AB1B64B63497B35E61C4023A63B975C2993AF99F3790D063FB5C0BF2EE4119777663AA04E54E6BBDBF492B7596A05F5B108121D9CFB033E47C21EE54A4126867BDC076C2521DE79C6F26B8F6FB1B3514251DD374101E8CC62DC4C20899AD4D5722B1232A0B32907726DB6139AB65688FF9C28DDC1387F6537E2E8459C096176A31FF8FC091617006B1C68520AB464113FA33068484941B79922291CC14F123B49D7BC75902B4A1634A0990FCB6612C8D07F2AB8CACE9214BB9145CACBBCC6F548CD97AC4DF928EA459E81C24CE1F8C068653AA4A29B9D23A7A48B9BCAF99A2CCC0A5727456D84ADBFA79EE58AA6CFE4987A2B1D2E201615328FD5AA92FE3B22F23823E99B1F4AFB7C69748ABFB12468D624BC677319C87616071136A56014796863D51F3D913135877DFCE7651F75AB1BA1C00066578B5CC07DE612E19A54FE062182C4B1E19B1F0A4211A9DA401E12C0407B897F3776690A45EDC578830609E31B4AD9D5A51722A221E33E74D1B5BC64C5EEBA6643EB9B32E54A1D4B770DE8C201C291D2E7981E1B9BDA14BF2675527C70664A941E4F4805AF025A069C0368736899F0A2D5FA24D8672A701528E33817A189B1CE655333D84481903AA3441AE4257BE7683735CB98D039585F4C6D842321836875C1A78F247B3D27781826FCCE47F753C88A57A8F39E8766711AD5753C060B7AE5B7EAE85021041306A70960FCB5CD64A655D366D59B703B52A5B4102C5C78B298595F1D7A8A28540C40603F2B42B79052A456E114602A948DF4252C17CC66700728D6072BA44161B05238641EDA15CFF92C4C89C754598615619B4EB2838F64C657A278BF4CA12224717EBBA1A86350BFA2A05594A885B3E61D9CA4BCE5D6B632E214F3B12B658915D2E423FD46686F031D29FAAB04688388456CF58A0BEE7A73CD016CE8B6BE1B762F160894F6D61FAB48915E54B1F919031A293211F4CE07B54C74653991D4A76E2CB68476CD7B121FE7CB80DC44A092864AAD8A12C8D3860473B60A370ADD8B25E315A99B708F80B44A7D01BC3ED4BE7719BFCC5094B9CA470BC0CE9D1A45CC9925BF43B9FC475ABC973DDC153FBB5689D624198816143C054D767CC7FAA0848FA39D0F825233EB2422292587236169C79F2C71375AE43682FC52AA75C815184028FABBC6639BDE6BA41609C27290A195489C81C64A4129252BB056654CC67072BCCE967539554E34383AC56B3FF78AA8A9325BB9314B16795AF5F25486CA214A41B7C383655303CE73F49A831907949141C2944EC8415EE4666F4FBC85E67CA3F15C68B4D23BB0887C2DDA81353C6F21740C08DB187AAAA88ED5B5E618011913534A332DC74C810C47601A4953FDF26DC7738E2BA5A56F45366840BEFE36CA04D20125856F98F28830473203728C4B9038E5CA7291074508CC55997896DB9353CECA7C76003D91E2BD8AABA8EC706F6AF3C9C3BA8882278E6097BECF179946FC3DC31AC8EC36228F49B935A57B1D7B2C16068FD977656D7122737933E84B1FA54AC1792C7219889681985A16012B524B4A92E499B5284EBE093D4DAA8D90B04714CC62E10C688F838E9C028C4D728B1D1ABF9F4240B463BB588BC4BF1ACE20F2C244ECA941B2A491000927670350B81549517866E471184674EF13695770440EB1BD49F5513C10AF5702ABD291925BC6B514963980C33D06FC130BA90BEA70CDFCB9BE6C076359D82A7FE1CA8EDAAEB1DB3130150A6FC7AD894426108B4FD7624E43FC3DC41A98D2E0475F166EBC8A9BD43293FEC14AD1E19273430FDF877C59613EA5D82782212F6BB9886CDC3C51E87DFDEB236DC90BE554C9ADA48D1E21A7BAC91D91C84CDA669571582B4FC17CDACBAEA9B09B6A4AC66405254277C95DC957AB24AC91C65DDED3C05F9B08F979470DA05E652A0155C733452747B8946E8118AB4CF354492586062C56BD2C9AEED133E5BB62D7D7C960D00444BAC4C75452AE0A89807CC450889DA8D96FB50C31C23B05CB8C839B016D3D9800282C0A791705BDF6BD98D8B5BFA94C3EBCB40F764D82C090D9F148B9D47E9BC7905AA3A8B8F122BBC4660D832E4A658430F96423906ECFE6A9866AC134B1CAFADC8589B1327D1CBED20A2194DA90E696250692B5522ABD7A938B9857328501C2DBF05C72456560E5C925FAC4FAC2BEA33A6AB588381684244B58C5D3E7C9D1170C20FBCAE4D6415EF45D874CC301C3A15E11BBACE37082F632EBEA76D8323E4BF54A63880636E1997A47476E8172F8C014DF7B477A631F10EB610CA9D603B73F363AF20BB65D6DAEC6328BA1495D7AFF28D8E2B208E72174CE5EB6449EAEF0C1EF53DB13666BF71EF79A6A0459B8B5005917AD042D0E0A77A112DDF508D652C42E7A0114A0AEB032823A25B116922D21BB2B4FA3",
|
|
"BB2BDDD3D002659A8C525821A9A61D32DBAC014DADAC8D13C129827D35F511782A3447D724DAEDB1417A3FBBC73ADAE3BF1408EE5425F554F32A4FE3617E775B890F9E4CBCC02F06A17CB0C3D4E97584C9F7FF6853EFB312B417FC85B0106204C666AF1C7952BCDC3EC880CA9EC121816C9C482E182C8378D6AF2F957995C655FEDCEC134967C74DC4E6386DC0506A6932C3DCF731E8E1754A3AD4573F2C0077A0AD6538F4277E438177F7B605A3911CF5E07255E21B4E3774454B0CBEDC6F5926C24B8CF1E2875DAE64E435CA6FC3B22B254BD33DDC2E6FC5F7AE1BDA493FE9190B476BC706853A19E65116E8FBAB9F3B1BEA59358FB1D94B117DDE84E2419F9A375041E1F71EB2CF839776DE04E1AE4615792F72CFCE668794CC0F76997C4AC1BD4DD9185CA24E7CB30CC77D35C4478A478479D839F0D0EFDC2C5698411EF243C1CF1D8A0065BF20F9C047EFAA6A7ED051EB0062E7209278501CAA40BC7154088BB9A4E154B7E91829CC4B8C4778798E06FDF0AA59788500ADEAF31B2065923B9FD9F2834822EC58F312C174BE6F4DE098118D34F694C001F4DC2C0D3E5AE232A50D688EAD87278543B76C4B092F644D30099CB6AC23F69B473B6402A987C051BC4835550C5B0537FBA9DE001C3B191C01644E54C22FA588913F657867C656FE1E9F4ED0CCA47D4B1452A2F820BB4BCFC9B017E5858BB224ECDCE1DD2F6AB43CE4A3D6FDDE89F0484F68EB5AA5584673DBB14C14366669FC473E51372103EC23E103A6591335DBCA27E8852B2C279D2589BE3AF8C6CDEDA91B3DB00AAC5222D6767A545A5257D750D535D800642CCF26FB1B6A291021F3A6615BB141C7069A3A0C2F16FC6C8AD4D593475D8088219FEEC87568FD794C56AC7DA908644AC17012D5ED7E0003DDC2C58007AC0354F068496C696B9F0A4740DDE001C92BB8A8940BEC2844B2FB37B9C4FAA3A34B43A6FE9EFA1996476ADBDE28954663FBD806A7CE1FF2C6D953F0FCE6D287FD438BECB856976EC4DB48223AD2A21A72405F261B4A25DBA7A03B18D005FEE3869DA18C521DFC2231B67FA2ACC0C1BA45EFD2F31B565000E59BCE78C1D9D06571B20659DD1A3799F778E4339E616C96E473A0424F1268AE5698AD674861677D966F1194372173E7A58062E014CAD86A48AA5FD45CC984F84366DC96A59B085206CD54471433AAD497CEE60789244B1AF32E677DBBEE60BC3C0B154B0A9AD33AC2E5814A4DF3C6DF0AC143F3024CB2C8C4CBB8EB95580D58715C9F731BBD9A064D98E69209B986B2AEE1D1A53BF64216299591FFEBD0B177E5AD01825E8637C8566069B62407DE341E18503CCBBD0687F8CCF5D39D08C87C9C66AE34E339F63F6D824BEADE8B48774D468B353E08C331BA3603539B79473D8BC11314272CAE5D7668AFEE89B6F3A81DB4237357D8A4E1A36F9C23436DA4F29FA0388D2F39E9AFC3DAA0157F9457AA3C08D1DB64A2685530F1F1012E4F5FE59FDCDB9F4D85F94940441019738BC6C35DA6D7A00C7C489504B24D8938EA475563EEF0D02799CEF48347AA738D7E604DE830433718340E1A7E895B5DD382EC69C42839284FB2BE923C695121CA9527EB02A75724BAE3913A44677D340D8132C0996FFA93E04152219471BDF0B3A0BD8C90556C95512445C6B07682E0C709BF8259DC0A53A730BC3119CA91B081C615744514E109FE3F32D48CF5CBCC30FB4EC405F88F2D5B19E4C7347D4C7A587E9FE695BC6C54C2A1727B2F82D43DFBE3D54654314A70AC628E01641A3DD5090414C15B3520E9C4C290604BF40F2A7BCF40264FFB5E8B96D012AD798BF69269E18B57EB11566A9747E25EE2FDBA9138B29E84C440F22FFE4C3FDBF92090D976FC9DFAD4AF0B9A363DE25BC04E59E5AAA40492904CB952D0E31BE0D2FE5EB5FC82C092C0E543783389137AB72114966FDDEACB31834605469F2F58381E814FBFBD5A3DB52ED341F34384C39A99D50342E0A9FA2E8FE487892895534DFDCDD4286505D1256D9CFBD332411821AF5A38B2B89BBF897A5345895865100B3473D38D30B628D8BCAF41D2F119E6DA56AF9D9286F747FE8C8866E3C153542F79113F0D18EED5D74ABFC4C151ADF4FE40C0EB1D57AB074645249E3E2B222E99A84C93BCC7C6CC695C67AFCB1530949C98F9DE537E2054F609F4CB77FA8003A870A61DFB39A62379889D7B8677CD32168C90756D",
|
|
"44B82092B22C1666AC208063FA54F1D140528FBE7F27B14F559E047B07000393",
|
|
"FDE093F23AA3E27045E30E0824A77EF01518BFB7B9F6E30EE2E275F2FCCCDC81",
|
|
},
|
|
{
|
|
53,
|
|
"F06B1C4CF6A5AC4B62A7F9B20CD5977EC72EEB573AFF6A8BA3E918E2A6196A8BB106A08CE09C4963D39F3E30562D719AD923046F89882D66CEACC0574EB7B545604AECB6364D92084BF81486E934CBDB36E7A3558D618DA6C7380BA475269A1E5F1A8720774A6F451D973289AB746F57C006633C5C5AC69160F401A2B1CE17A02F57C81D88258DC3B07FE993829E242DBFA7349B9783AE34B63F1CABE577CAD7A16B845A662F3B1172A23379B1A135069A292A5D1483776BF2386A819462CB0213138B1E7649C255639DD1C25075A8B1057D688518BC085E483A4D1637335EF28D9A5254C83A08AED98732A15E46838ED2FB2169176FAF92C309D9473BB1BA1D1A2A120B714FC6A1AB0C60B85C003F378F97599D929AB93DCB735F0CB108084D2A239A1B1720F29201A7AA247E3B23E8244F1A94145FA63E18C4416B82344DCC7BB61420A7DBC593E26430D4926176180BCC2B59E7ABEC8246054CB707C8B16E314D9CE246A7DC0475D19B2035641ABB5D131BCFF1025BB516178672120C452D48441B5CC17E75F7A3DE209A21611E0723ACF7815F0C41AB9E85994AD81509841041CA5473606C200A55AD887637870124888A1C17A3FCD6BF0170AC32624145C12AA18283932465E779C7588906073C2D7A7CBC1CB8036E390362352B16643876104BD544892A0514C6CB1C19140B60E25B6F01ACC76B6D6DF7C121F5A945073FCAC611BA5C41FE1C064CFC028724978446440DB75BEFC38BF6C803F0698F7EF24C27C622CC550F5EFC86290C46D25A5F49F3C812C516567947942B93E73414682C31DA22297A169723C5651B8C0A2697AA560B4A65D8A9E6F0398C0C2FA55C3A964CCF32F16021FC5D87E279B923A6D05419B741616343BBE0C2BC1983087A731F90EB4C33A82CBC37C09E587442676D29712A72B06B79DC1D5554C98B24643A05780FFBAF5AB89D28D6557610BCF1448080A640533A56FBF5C422EA200B65AA29C388FEE3CC3CD015A1CB2BE4C6315EF949FBD3888607877B086980218F1EA650BE30C6FBFBB17A879A45033EF7631EECB243B72C43069C4689F5BF9DC78A1D60A3785416AA6C3BA9EC6340A5B0C40450A89922C36C02F3B96FFBF4636897C622E38B268276E428C522911C8B7C015DD57B357174B40968F20B98C87216B4208BEF2B4F2647336D1ABFCCB939F3A6A4B5B51092F760D3C27F98E3CDC1AA4EA11515DA642513F4C2B30935841A7DE6932EB4EA7820C79358A7766021B60ED2071F547A1370B789A0AD0929ACDE7506849B49F7D12053554DA227157C7C25295555FA2AB93F167043C83009F455824A1EB81A27DA8B39B015B7247C4FEF343E3585B519221AA2052C93C1C4863B0F940C8E76C0CE562ACBC7F029FC1C54726261E6F66C63360956E06EC631604724100A861C2290BE296A91F5E88BF6942004E9B6013B4AEBC44B05CB9E08114BCF9A92806C7934B373FC444F88D966D1E43CFAD339F1D217BDAA8CE4CC93A5554152091C2C0C5961F5CDF71A5F8AF056D1059187784C153056680174567436D86228DB3B399769BFCAEC1A3F8BBFD6908410608BD11AB2DD9A40A4C47734E579CA70CD18B304D8D72161AB4DDCC7B71836AA01A870FB87AAF9526D09023295498F15051C8159168AF674602010ED2182303C8D8C39191B2C7374961E4B838B381C15F3E5A339D79883F35E991844723C4F47D99AAC517317B69B0C09872FF300B602C4A63833EDD7CE275A804EB1C186EA7E8CA7B63C2C90B7503378F4853BAC5D9B9334E74A68CFE868A3D4A1FC4A89BD967F127CC0EE0A174F42BBF43430B7A849AF37C1EC1AC7DF9C3F9D514756434EF8D61B3A0C5439A394BA974830C3566BB410EC9797C83B9BE7A1141858A3ABE9014EBA1BB35629E67BCBAF9592D9D6B8C2879B06D44EA5B3AD3121B83D550645C079D8E154FAE2B287A7BDDA9437E4CC57CFB4C9CFF1C3FD98B2BF829BD7829B88E47A6057AD7F365EBDB548C23C3AB4DBC0CFD7C3B3C8AECEB9834D9B6C4F325E44628CFE3BAD02BBB687E57B2168211DF44B9BEBA5204678BBCC9157274089D30A59379FE4C0C343CBB8E1D01BB2C388F42053F9A304FBCB1E594C4A0E7BC6B86097AD1A9505462626810ED6442FC9132D2DE95A264AA5CC966748EB76E5373062781F2B7566CF65DAEEF2348D39777B4126B6027C680B0266EA29B55E586156",
|
|
"3AFCAA49F37030D65083F07BF42454A5C74ABDCACEA3779863D1408BA85CA680504575CE4F421CC94315E8127FE178A705355B30B54C485B08207493714B8E9A1199D5313018F3A54B50A0288510755583855965F53A2F3722C820EB7DF72BAB0C66B45A8527584704F2A78E8BABCA0163963D2619BE58095180AA221B6E3AE79843368DAEB4A0BDE523969749B2F25DD65763F718857D68A56AC5B94B78A664729188C1BCB5144753316EEBE2391AE2A9721BA51D5063F150813333A4A95534064070B203592E2C3C2ED59B2EA4C714B29975B98E0AB86AFB825C76AB6E83D05EF51C554869633C2A5C692A403F32A6C4482691708ED5233AE77CA226FA93A15608D3E01A6EC0B296F8398FC74474A552D61756213B690D2C19C1D2B76866A9641422D1D0C81780008AD936CA2937D0E73755067B389B0DC4247850D889E3754897C55DC14B95EFA1872CC3228F82601042BE05901FED3110BEFC56A8786122609F36D7BA9DE4AD4B677C436A6662ECCDACD28A8649560D3219304034E3E383DB6325A989668624BD24596F21F20D5DFC67E6D3CA9F940D870725F4BBC57EABC219F39FBC4C7388D901FC6CC5BF68C6BEC5A35C5A5A1974A843B967D96B0D56E3324B8A2C02621B3B1754944CACF69C71DFC76C5AF0645EF64F30AB40CC7AB765B8AF3A442BFCB32331FBA769A1966DA31F4709B34F586C15D0AFEC075F8C454C8CE7CCA0B8356056C86342797E462AEFD5AFBB7B894DB81CDD9B1978C0AD4DD62F2AFBA23F0669E1E26E8D2C718088805BA80EB23092DC6764286A7E251577AEEC292F03886DE2CC0FFB8CA6BB30BC2A808CF323F5D42892885EE515351626C208415D0F59A2225036368C7E6AAB9445359CB0762B5D5385197270404C7D0063A10597C2DA794DE1447AEB0366047813F36569B21551BF5868ED076E3C3643185523868C11DD6A8FF91C85C6A3BDC6849F6AAB93DFB0CCC75B53628028D5D8C3145180C91BA9D6F2B4BF741E073CA58C554E9BE169B3261F92168840B2B9CFEBA990B0714995AC825B73A085BAB6A888F327475BB674A7DC540FB83169698617A2CD549983481915A7024EC02CBEFE98749C86578326C93E930A9FDC7B61090AF934B1ABCCBB5B789228B01862FA6337901CCFF7B679387A0AA77D01FC1DFDF628865467926AC657233BA52632AFB12964E30BB8066E97DC25A1109A85865D58F0B117A08F649749D43122E36203634AC79FA95221235C11C99EA8281A72B9835519920B02A2C315C25B60795B66A7555A02ACA6B927554101F6C432E9BB68794F9BFB8EED7840595254731463D9E48777C52C90F763E2DC0150371C44214D7BA5B0A121CF140A7AF83462F2D193300B4658421EA237A77FB40E8508CF201A93D45B86E6FC8AB0D95FDDEC8733F6757C93929031A2B08A97C87B75FA62443BD6477BF46CD77994A702170E363B40A1030A34653EFAC3D10683D5D83B00486C6B630D938A5974C55F56D16334F95AEA1154D387B910C8396C2392181BB1727113C18641B550B8A0898689E7893EB0C0474250502741BE388852613948B2888EBA65078108EFCBAC1CF958FAEAA777B8AA51B346D7D0A992A72FAFB2462BF28C9CD82617016B32D6CDB4D6279F991AD16AB2227824E3BA8D255023EDA822E5D3C0BA534C86E8CEE96868A8874A2F574E6A3199309A9707E079CD962BA9233D2DECA9BA8490E2B69132F3B49E810ACE170A41CC2B5D44CB935C9FE122086A218D2894C0FB232F3914B85095B487845FAECC06023BB3BFA25279DAB2BF18A1BE43341E947FF0D304D1272D2D8897950A4F96C5CB7EF73C00A48162778338A43712B3C7C0EC1FB752A64E94BFC4C450C8A3891F75937823C5FCD3463732A7EAF8A1E907C85FA31B9AE24FCF737CDBE32DC4585E0F9C221BE94FBDA80900815688CB53F521B7E776AEA7993594F0AAFF3319024662E848768D101DF513229C256627F87B6631B0524B0A0DC5BEAC636DAAF13A386CBB2D4747140528EE728859672671720415943A95A5CBBCC56CB2D82B8CD18C2457180B3544F975584E4B17F339CEA14052A518235FF723814B96803A90E9C64E2828B417EA494D8A7A0A373A2E584A2408088CCAB264E169AB5C89B99B5BCC891FAE70CC2B4A219E2C2257C42AF06B1C4CF6A5AC4B62A7F9B20CD5977EC72EEB573AFF6A8BA3E918E2A6196A8BB106A08CE09C4963D39F3E30562D719AD923046F89882D66CEACC0574EB7B545604AECB6364D92084BF81486E934CBDB36E7A3558D618DA6C7380BA475269A1E5F1A8720774A6F451D973289AB746F57C006633C5C5AC69160F401A2B1CE17A02F57C81D88258DC3B07FE993829E242DBFA7349B9783AE34B63F1CABE577CAD7A16B845A662F3B1172A23379B1A135069A292A5D1483776BF2386A819462CB0213138B1E7649C255639DD1C25075A8B1057D688518BC085E483A4D1637335EF28D9A5254C83A08AED98732A15E46838ED2FB2169176FAF92C309D9473BB1BA1D1A2A120B714FC6A1AB0C60B85C003F378F97599D929AB93DCB735F0CB108084D2A239A1B1720F29201A7AA247E3B23E8244F1A94145FA63E18C4416B82344DCC7BB61420A7DBC593E26430D4926176180BCC2B59E7ABEC8246054CB707C8B16E314D9CE246A7DC0475D19B2035641ABB5D131BCFF1025BB516178672120C452D48441B5CC17E75F7A3DE209A21611E0723ACF7815F0C41AB9E85994AD81509841041CA5473606C200A55AD887637870124888A1C17A3FCD6BF0170AC32624145C12AA18283932465E779C7588906073C2D7A7CBC1CB8036E390362352B16643876104BD544892A0514C6CB1C19140B60E25B6F01ACC76B6D6DF7C121F5A945073FCAC611BA5C41FE1C064CFC028724978446440DB75BEFC38BF6C803F0698F7EF24C27C622CC550F5EFC86290C46D25A5F49F3C812C516567947942B93E73414682C31DA22297A169723C5651B8C0A2697AA560B4A65D8A9E6F0398C0C2FA55C3A964CCF32F16021FC5D87E279B923A6D05419B741616343BBE0C2BC1983087A731F90EB4C33A82CBC37C09E587442676D29712A72B06B79DC1D5554C98B24643A05780FFBAF5AB89D28D6557610BCF1448080A640533A56FBF5C422EA200B65AA29C388FEE3CC3CD015A1CB2BE4C6315EF949FBD3888607877B086980218F1EA650BE30C6FBFBB17A879A45033EF7631EECB243B72C43069C4689F5BF9DC78A1D60A3785416AA6C3BA9EC6340A5B0C40450A89922C36C02F3B96FFBF4636897C622E38B268276E428C522911C8B7C015DD57B357174B40968F20B98C87216B4208BEF2B4F2647336D1ABFCCB939F3A6A4B5B51092F760D3C27F98E3CDC1AA4EA11515DA642513F4C2B30935841A7DE6932EB4EA7820C79358A7766021B60ED2071F547A1370B789A0AD0929ACDE7506849B49F7D12053554DA227157C7C25295555FA2AB93F167043C83009F455824A1EB81A27DA8B39B015B7247C4FEF343E3585B519221AA2052C93C1C4863B0F940C8E76C0CE562ACBC7F029FC1C54726261E6F66C63360956E06EC631604724100A861C2290BE296A91F5E88BF6942004E9B6013B4AEBC44B05CB9E08114BCF9A92806C7934B373FC444F88D966D1E43CFAD339F1D217BDAA8CE4CC93A5554152091C2C0C5961F5CDF71A5F8AF056D1059187784C153056680174567436D86228DB3B399769BFCAEC1A3F8BBFD6908410608BD11AB2DD9A40A4C47734E579CA70CD18B304D8D72161AB4DDCC7B71836AA01A870FB87AAF9526D09023295498F15051C8159168AF674602010ED2182303C8D8C39191B2C7374961E4B838B381C15F3E5A339D79883F35E991844723C4F47D99AAC517317B69B0C09872FF300B602C4A63833EDD7CE275A804EB1C186EA7E8CA7B63C2C90B7503378F4853BAC5D9B9334E74A68CFE868A3D4A1FC4A89BD967F127CC0EE0A174F42BBF43430B7A849AF37C1EC1AC7DF9C3F9D514756434EF8D61B3A0C5439A394BA974830C3566BB410EC9797C83B9BE7A1141858A3ABE9014EBA1BB35629E67BCBAF9592D9D6B8C2879B06D44EA5B3AD3121B83D550645C079D8E154FAE2B287A7BDDA9437E4CC57CFB4C9CFF1C3FD98B2BF829BD7829B88E47A6057AD7F365EBDB548C23C3AB4DBC0CFD7C3B3C8AECEB9834D9B6C4F325E44628CFE3BAD02BBB687E57B2168211DF44B9BEBA5204678BBCC9157274089D30A59379FE4C0C343CBB8E1D01BB2C388F42053F9A304FBCB1E594C4A0E7BC6B86097AD1A9505462626810ED6442FC9132D2DE95A264AA5CC966748EB76E5373062781F2B7566CF65DAEEF2348D39777B4126B6027C680B0266EA29B55E5861560C871C88630A6A8FFC9AAFA33103B784706D24807398CCF864482F10000D496D8507CD4E5A735FC970483C94C6289C9C15BF6CEF35AD135C723E2E44244BD2EA",
|
|
"C3BE6ACB5EFE1049391DE9D3D706922904336603C872D82DC5DE264E6C32A12A990D73C5DBBD1D0C12ACC42CEF07A6F98245D55CC21F5A13EB097FD006E6157B93D211B758699B51AAA33706AB2E4C305E1C40D2C59121D0C4D5038E865A42408D2F9CBF7617E379E3F106CF6EEA8E74A68B6CF9B403FD1B8C4066C5C446AEB857BD09643FF76CD72DCE33B118E7108EB1956A6A39CCCAD3CC3ED11829A937675F1441D0E4D5F557C938341AF6DE79918DDFA0E344179706B260D105DB29563D3C340591369F951FB5081138A49B2FEBEE17925BD41FC06C20F030515D2F8AF7A844A0B32F2EE18EB56EB3806D84502A2C6574D98C1759496E2CBA7FE7B883ABCC3451BB5B0DB291C1D6CA8A2A56765BD7AE65836E529B496D371139DDD5ECB35DDA583346E93F9ED1723CC0B018ABBC738DE8A0BD42176F5BAA9A7C9FBF2BADDDE6EDD30FBB0D37D2DE15C51770877CE80D499D2F1110009550F84F74AAC9892741413A0E762FB4C8E8C9D9AED5397015E436BA0E0C6583B3E476C6A07ED684B9DC8CCC243984886097D9F5736EA73598BFB900A8B041551A4A5904E4E18D939A2F54A71183BD709D8D172C3F774F3AA237123703BF21A3A54A237074811CA30B8D0622D513248475411F0C6F761FA0D95F461E72BE7C1CD227198DDA88FF91538DBD77DA077C5015FD83D71F5E13FB131B43500B744D3BBF64A8AD5BDB960DA4E3DA77E34428A76BFB07D3D67204D3B4B874DA570B422600A42D9D93D9DEDEE43ECE60F14D330DF88C95434EB151AAF17334FC4D7D2E1C911AC9955004B7B2F8A1775FB48EA447677AF7EE415927B4BB16340A8119C347B7BF8D4117EB2CFFF75195F2741B3EB9A84B68666F8063AA33669E1513D4FB6158CA1A88049B644122429D9892D75FC1EC0D8CA7236FA1C6279D7BCF2BE644C2D369DB2359EF8A9D74207DD91B6C9E3871715A8EB3E218FC93F58EDA9EF5D285F2129018DF0228B0A83A3DA68E48658CE6085A7EA497E10A22E214739D4E5D429D6F320995480C3595CB5E01B2D29B51BDCD7DC40C9D1B281FCA024F2B175C9F76A5C63C3FC82B73FB4FFC2D1953749555E316B17D1B2631A33634F47F1C066C14A1046148A38C745D3D0FE29CA0F1CD296D435891470F0373A21360D5B06AD75E7BA4B52176EDC1E5799C7984001A876C1923158E66A0BA1791F8D4B9261AC92BE4A58423B6D60E4E258C9BD9F97741F9724518A5FDF4CE61ED4EF27DC98177EF530D94FD7DEB5E4CC8660E7112FB5AE34A1C4D0CBC08C2AD1A5258AFC787B095D7751E5F8B8F2547D29F21F9392007029BFC1B147300AC72BCD80CEA8DB0F1AA46B136083143A3A493CD467DB93CE8EF11F3E178845BF531DFEA1DE932689A67A02EB911AD720F52DA51AC05FF0B414EFF8FFBFEAAF308DD8553E5CDB6070A2BCF2A0DF13DCA63FB66A6F8301C43111913B18C3434121DEBA46EC9C2B0D73A6AA282B9586009718E3845B67FE22C0975555A37DB47434A26235C2002F7F773364EA36D60E00F15787AB22DC4E4209D77B32BB430355E1DA7B2965BABC70AC49FD5E420AD3EC2CB3C3D5210126CEE1B54697C3B9EF28D801D4E9A5EECF1BB774067FBF0264BDF1DD86E7A97AD35BFDF4D0E998F6F2C51F6A5D37F3EB8765EADC3C0150E21B455A13A324B29D2404FAAA145020C4274424AB856A4961C7E7CA922E26BC835251E40EA897E80229B931F9463A268E845C8F5055F78CE1BD3A0FD6FADCE10A3B2FD5E140161B076690ADEA2CA24387345FB5BED39AC5B9E08A126274E12BD3E6EA188A2EFFA005A99BE2E704310D466E909AE2ECB63776052DD1E1D1F0692E4C04AF79DCC073A4CF80966FBEA05D178A0FA6ABE55C7CE361AD6601FF18C42D5084428853563E0E4673CEE8BE6B339CE703FB8CC6CFCDC0F416B8DF8F12400691FA86F89541C654525F8B286CF06D07F43C95CC2BBFDABE9004A8B40941860318C156D0C9647C14371AEE0417754A3B7827BC83506D20BC3DED4CF53CFE8D37ECC2378CDEEFCA789F53F70A6C011FCA079BBE0F9E40CC9A781F466FDABBC7D0896E2897A06C0AAAF4A83D3D1D2D6B844A2CF1CF88C9CEABA9FF11C1B4E748067A47B5A378FFDF69C776716B7DDFB12988FC5DE30EF7162727BF3D94458BE79194C96A98007F95FC3AC1A2253D21B5EF60846F565B3AB92B8A4002394B2CD2D280F8976",
|
|
"E9A618A93B7C7838F9C4A8FE92C4407D3E32ED28BE7B63ADFB9A85C8E5EAD036",
|
|
"B31920DC102928F497E08EEB72A41F1753DB939CA30E8A3B48B059544F8DF0EE",
|
|
},
|
|
{
|
|
54,
|
|
"6F1777B3673C3D5BC2D582930467815B74570074BD920CB169889367016BD95698FF9C51A2E8A97FACB82C749437953A5EB2B1E0B38475745BDD7719C64C7D9A9C927474B973C5B5A05817C0986C321A1E492C4AFBA5B8077B2692C714BD61477334AA1947661D1583D832695136399FEB4FAAC99033601E3BB59BF1D42C7D6B60FB0566DF903271D41E463923EEA3800F3B35D9998669F94477B57AC3D68A02C49A4D821B15933BA67B8D19BA5201983AE3F39B0249C5B86763FCAB12CAB5874F0B185ED6452B7B12F490AE26781811431664361DC5F5C880C6A1FAFA103DB663F0A8934A9465931C397649A662D22A85FA32F3B638BF7B5373D6C242372B487C9BF089B72DC356FA2905C5432D37020291A51DEF99909AB7909BBC2C95B748FBE5ADF36AA84A7266A61956FD269F372A454EFC76FF870B6AC6B58FB03388263A198AC767741B04C804357765EBFA0E8AF6C2D8A0729E939286967373792F4E8B38B3B34074BBA05E095083B4A6EBB089C534BE59903AFC237008E88D4992299D718EA9EBCF064BCF263392205A310206053354529C742D45B534A4EA9BF26527F2258EC72A9AB8BC284F9A7F22A7710174458AAAB07B1A8816BA08ABF840EA62B97A4A6F05E39CB18901DA626C38E8094F8718F5A34D009013F9C27DD0739142D1A19CE0826DEB5E99D2023A0165E5F5AE5D687893A2477DB663A5768AEEF53DECAC8252AA5FD711683840C37AF71FE656B06B0B6FF99585F7DC51908BC253E047101756D9C28D0B8C985A90AFED06428FC665A22C8F72C82E4C64BB53FCAB51877D1219631AE215129730274568D5A745D96146C55A81A2CC4D59F4C12E23987669939E83A03C87BD847CA783182517B254CE140BE1DA3AF8922F55742C5D7C0C002C05C1DA8528E39B028B526F1C5D5E8880F7751C4FB619659B369E893E86E4B4853A62F64A7F05121C7C486E3956B676B3BF9411A79C9C1BE5A5B92B7101AB1685AFC88BC6E455147A16AA93012DA7355C4BB52540CE47E3C7D8705AD767789C5A09E7F856535B39DA06B9B8A984F2CBCDCC083B4B600763376ACE71BAD9FB2F0E1C2CBC0CCE77B75CDB514BA797A6C39046B57B973BEC53F94B885DC937824A78ACD06B135A9D6799CF38CBA5B9C5CFD6FC7CDDCB9110D9A47FC9CAB4413180D38AE85882055A9BE7360E16F4C4751A2BA2EC98BEDCB92E897FCAA4C9C9E06DD82C90D1CA776C1A276A089987AC9983F114E0239FA7F03E49123D0C747E03440EA56B77440B89EEE0318DF54BCE1092A7C352DB29916EA25C790628DCA415BE4210A2627446EC2724B32C3C33C52D230D24449D787BB1BFE16276EA3B95F22D8E180EC406B726B22E3CB90A9B67A6D0674E65A18A431C6C74D4940BBC3E20B588C5A7C0978C6DE4C38E44D69D4CD0ADA2A5A901C78075E9AE113350535B35184343B3C158FB95849953333580A1DBD42AF1F244967294D318AA6C41A06E1B944DF3841AA7039CB503B94428DFDC0936CCCD4DBAC46533B7825452C8020D03B1540F660F08948E1FD0C453E7899A4C368FA07BB635B341A234CAA607E4520D4EB83D0E748EA7D73BA7186F9A51780CE81E90574C44B55E57E448A63868A8A740D2902DAA3CBD15B2883B012FCBBCC79C71B380F2042A92C487965E3A58BF53A20CC878BB34F474A5E1493C23B11996B8ABB2BBD84024D06A2B7090591C828676703686588FF1E9473BE2CCD5C73C55318E12C892C15A4C25A9B2D96965A44880FE7AC589E8C839377B792B0D3E6C885749264328BAC0750CAB9CA95AC3124501C66D3AAC4B8833CFA62AC82930B55C6FC81CA9EB9830BDC821A8B09B36963792887694997A573AB25A587A6629407F2902A257A229E64F66434351923CAEE32BF0AC0044B1291B015CA70BC8B19CCBEC83368753A2F648A74FBAA24176641951ADAF561286CA0360C411D1E7B437110D55C42EBB0853DA52511D918E28E97586AC1DBD4A5C01DAC272FCA4134582E941A44CA179E4C47751115151D72846451C36E74921BB76F0FBA7BBB5CD1DA6929C1702B6A75564CBBF8D26A26AFA92095C58E70091A5A3AE828A3820B0A6CF52AC55D384BA1B8F39B7682E99472FC79A526A96DCD6197827BE23930FE9D357FFF7904FD40002043BAC3AC585F1CDA4EB7F95C7847E0CF96267594737208E496A2872ADF1AE515BDEA873D987444A",
|
|
"82E12EF983A6A7B25B4B52755910633B5A975CEC6522EB2EA5506B0268A8EBCC85CD19955340B98064212C582460D54229E771E5871CF0976C7B822E33414F4907324C8789F4B583D8890C6E9AB4AFEC879F44108CF28CD1B5BEB07871B591636E534999910C79E2801C88A93565B36C15696431119D9963A836382A719D8CDA2415156B97A950D057B945E26E7118C6715A79F0507A9D665DADD1A8CA32AC93449B18B15094684F754086B267C6A8898F46A18105BB1E83B19FC3B836B2B0103168108017B7AE1BC4CC672DF797A8D75ACE81F4A0C83C459993C9414727FF2231FD297083617C5A6B9BB4447D6FDA8663525CD7E636E8379AA6965BC8C68C1D47565D779673ECA900584F2268964F4357B7B62215C081E7005A7E728FF95216A052A148A702ED603952A679FFB8AC886B6CC328C3BB225A82556F9A39ACCD538E4CB0ACD1485FA9E19291957C19B2463BB077127C66B5B757A5EA097F2CB4120CA3BE99C6C1EA178ADC02AF3AA53A5C3EF8507298064CC6A4BD5D239ACF5216496689A734629012C0DFD39D98F50DFE4A55A851CF0CA6797DA473880570BC2B1BF2D5378D2A2F05277C2400C31546BD35B185DE3CACFBBC24AD92BA306589C511AA38812677E5111F4AC1E5FB4533E43540C7A65512881C884327707D5A44A299B16C85A88A70B6CD1076B15765A9F0477D6253175EB552911A157BB097DA28B8B690C87731C84A3CB340370C21279EFE0B600A02C7F16C82AA912AA0857876C96699DA1C75C35338E30F3A0C9152D5AC74538CDDEAC13F34976786950A382023C01E021A134C7B7FE01092A80679A05725F1C2BDFB3B3555C6481D03AC82455FF2EA1918D81FBFB758B8522DFBE364C2831BB1C90BBFA9B6B15B0D5BC6A699985DD2A18281CA6C244017A4E5B25A42AED2506B18018AE28A043145967F61552360005C1B2D8E8CB14B18C06AA8669F8BB9D1E5209CF60FC340C5B499656A783F5EBA632989C292146953130F8FF71F9AC690AF131EEA650BE40B3B73280802AC72F1B888D5BB327984794748CB4DB8B0BB9A8BB4BA400C933EB489CDED98BE72CC814A5B0C5CC1067A5C382175B0268757418A59A8DC12D2DC1A7C48BEFE3A1DB4FB000FFC1B3E807ACB33C74EF97FE1475432222DCCF22B0FD405B4CC90BD4217181CA5614ACDF3F148AE8B1919B2CF1EF89A99E411CAE23B246479E581431D12676E893124C1703AE727D4E0BA393583CEE97B62F5B09F6B2669F06199C5248D8B330474547C797AD352B3C07236FDD8099B847C29716ACCCA954583814822234EF90CF8C0C828AB406916CE3FD8892DCC076DD5605BB9AD42F44F0FD7A97112C67C514524B73379862DD04147C205B5FFF76636111579650D3AB02981821AC8097FE0B70F85BA109C7C598F6417AD7C402F6A250A1A11A1B226F651B9EE542267C597B1F571FA4B1B84D41EE6BC36C74B4E850154381816B1E9B97DE021474267F7B40B5FCB7277436CAD1582327981C2603D75718E2D0B7AC85A768C35C9E6CA8BE712A153FAA627C270CFB479AB0A3C27BB341A1071FB089F23F31346045863B641026ABB7D380CD4A3C20D4CB8D5B6472AF015E6322B23D90DCD148B20332046BCC62709842B4383AC5236856333153902576A5A119503B654823CD6664A566809B5ABBA1B8467696CA9DB01729A31DA877070ECC7861903FED84760B0CDB63647DB530F4B2C4353163593CAB189399A63A2C3B2E35F2628C3A662ACB8FAC86869AC59778C34BB57E2B3329517CCF9088179C905EF798C93C70F6E479D6EB69EF19142F2E24A53E95D41B175BBA4CCD038718F612A5FDB6194245046CCBC3E784877F23B7595436C292A181A62A8A58A24654193CC6AE808CD8ED2B3EA4B4560D467E0C94B6AE0AC0855B76C516E84F909F3F38CCFB2B143964A238846BE289B8094B41394BFE8A510BC571DF0087BBE71546B8BAFF40AC08F32A7F8015BB2CB678CFA2B18D66D4C26CB47257C7A6282608B587F098571D0BF3084957619771D1664B159984CA52AB85BB8AF3027593218853545F0393C71171D2916AC3CCB0F2CF5307BD6C75937CA30405DD370A7AEDB4FD68B2550312BC6E23FA75407A05BB0603C5105318F96F338368328D382B61EE63F1E20AE848748DC70326F1777B3673C3D5BC2D582930467815B74570074BD920CB169889367016BD95698FF9C51A2E8A97FACB82C749437953A5EB2B1E0B38475745BDD7719C64C7D9A9C927474B973C5B5A05817C0986C321A1E492C4AFBA5B8077B2692C714BD61477334AA1947661D1583D832695136399FEB4FAAC99033601E3BB59BF1D42C7D6B60FB0566DF903271D41E463923EEA3800F3B35D9998669F94477B57AC3D68A02C49A4D821B15933BA67B8D19BA5201983AE3F39B0249C5B86763FCAB12CAB5874F0B185ED6452B7B12F490AE26781811431664361DC5F5C880C6A1FAFA103DB663F0A8934A9465931C397649A662D22A85FA32F3B638BF7B5373D6C242372B487C9BF089B72DC356FA2905C5432D37020291A51DEF99909AB7909BBC2C95B748FBE5ADF36AA84A7266A61956FD269F372A454EFC76FF870B6AC6B58FB03388263A198AC767741B04C804357765EBFA0E8AF6C2D8A0729E939286967373792F4E8B38B3B34074BBA05E095083B4A6EBB089C534BE59903AFC237008E88D4992299D718EA9EBCF064BCF263392205A310206053354529C742D45B534A4EA9BF26527F2258EC72A9AB8BC284F9A7F22A7710174458AAAB07B1A8816BA08ABF840EA62B97A4A6F05E39CB18901DA626C38E8094F8718F5A34D009013F9C27DD0739142D1A19CE0826DEB5E99D2023A0165E5F5AE5D687893A2477DB663A5768AEEF53DECAC8252AA5FD711683840C37AF71FE656B06B0B6FF99585F7DC51908BC253E047101756D9C28D0B8C985A90AFED06428FC665A22C8F72C82E4C64BB53FCAB51877D1219631AE215129730274568D5A745D96146C55A81A2CC4D59F4C12E23987669939E83A03C87BD847CA783182517B254CE140BE1DA3AF8922F55742C5D7C0C002C05C1DA8528E39B028B526F1C5D5E8880F7751C4FB619659B369E893E86E4B4853A62F64A7F05121C7C486E3956B676B3BF9411A79C9C1BE5A5B92B7101AB1685AFC88BC6E455147A16AA93012DA7355C4BB52540CE47E3C7D8705AD767789C5A09E7F856535B39DA06B9B8A984F2CBCDCC083B4B600763376ACE71BAD9FB2F0E1C2CBC0CCE77B75CDB514BA797A6C39046B57B973BEC53F94B885DC937824A78ACD06B135A9D6799CF38CBA5B9C5CFD6FC7CDDCB9110D9A47FC9CAB4413180D38AE85882055A9BE7360E16F4C4751A2BA2EC98BEDCB92E897FCAA4C9C9E06DD82C90D1CA776C1A276A089987AC9983F114E0239FA7F03E49123D0C747E03440EA56B77440B89EEE0318DF54BCE1092A7C352DB29916EA25C790628DCA415BE4210A2627446EC2724B32C3C33C52D230D24449D787BB1BFE16276EA3B95F22D8E180EC406B726B22E3CB90A9B67A6D0674E65A18A431C6C74D4940BBC3E20B588C5A7C0978C6DE4C38E44D69D4CD0ADA2A5A901C78075E9AE113350535B35184343B3C158FB95849953333580A1DBD42AF1F244967294D318AA6C41A06E1B944DF3841AA7039CB503B94428DFDC0936CCCD4DBAC46533B7825452C8020D03B1540F660F08948E1FD0C453E7899A4C368FA07BB635B341A234CAA607E4520D4EB83D0E748EA7D73BA7186F9A51780CE81E90574C44B55E57E448A63868A8A740D2902DAA3CBD15B2883B012FCBBCC79C71B380F2042A92C487965E3A58BF53A20CC878BB34F474A5E1493C23B11996B8ABB2BBD84024D06A2B7090591C828676703686588FF1E9473BE2CCD5C73C55318E12C892C15A4C25A9B2D96965A44880FE7AC589E8C839377B792B0D3E6C885749264328BAC0750CAB9CA95AC3124501C66D3AAC4B8833CFA62AC82930B55C6FC81CA9EB9830BDC821A8B09B36963792887694997A573AB25A587A6629407F2902A257A229E64F66434351923CAEE32BF0AC0044B1291B015CA70BC8B19CCBEC83368753A2F648A74FBAA24176641951ADAF561286CA0360C411D1E7B437110D55C42EBB0853DA52511D918E28E97586AC1DBD4A5C01DAC272FCA4134582E941A44CA179E4C47751115151D72846451C36E74921BB76F0FBA7BBB5CD1DA6929C1702B6A75564CBBF8D26A26AFA92095C58E70091A5A3AE828A3820B0A6CF52AC55D384BA1B8F39B7682E99472FC79A526A96DCD6197827BE23930FE9D357FFF7904FD40002043BAC3AC585F1CDA4EB7F95C7847E0CF96267594737208E496A2872ADF1AE515BDEA873D987444A01D0CE8C13AE285B2ADA6369EE7787704E4D0038701F4F5CF19355434FF81DD4DB2BB4DA511A3564740C5A712CB3C888FE2ADCD764B98BB8E6254B19352AC307",
|
|
"83828F7ED8CE90AE917CA0FA823E1C6FF2EB556D8CB35E0079839BA7301F3BAEEB76A210A0E02C9939DAE1EC693CEB1A53359D6840EAF6DB845E2E693CB4B8CC0CFA1597CE2B207A63E3AC71D8027C865665F417300592ACB7F6C9FF8C975EFE88474C1ED682DA58457004573719C966FDD0C7990B897E02803FD382BD07DBA3475BFC6084A8EACEF108E5C8BAEF614E9A100E4B25E6E3B1131197CA090288C3752D2A93A251D8B235D46750BA2DC49C3D0BFB0B945D890977490ED4EBC4508D4D94456595244E76405665081C176A0F3F227ED755E1BAA0739086424F74CE179D8FCD28852B25FD51ADED1F32775B47F6DD4CF8DF007E103BCBBDA9748E279576CAC724B02D90EE31E9C57B418DBC77456009EFF657B8C68AC2CF046598223CFCD8AD81541B08AE0DF43C91CA500AB76A2AD90B1EC235AC6261377E20A7A016F13ABE2A4778E8FEE7D2BA82A910B89A11EFCDF57399075B220CA9425BADEAA36827C8F7517788FE5B0EFE40A05678E7822B4D9EC9B9E10F57BC856C5A46484F5FD4E01206B9DF9CF0B00DFCF9B79BB1F54098D33DFDFE1F89377792FC1ACBA6B75E92F6EBCB4248451777F5EE9FE18E88A099D0E1CF25F12B8186498164A31626A934DC6286FB50099B9B9954D078D6871DFC834AE341133A5B11D8550045558F5392D802FB197C95DF29F019565503110F480F76B86F7441C05F914531AD367D0F9E98B8B45D38AAB4707A793735C7E1F73892BF98DCCA383A9A67A5F1C2B70EE545752DCDC6D713A6BE95970668589CB81FD8AE42A497BB3831048583EC6A13A7087D55D6711D6A9B3D0EC929966F88A6DBAA2984EBF94F1E867794D0A4FD1C8D1D64BDEB83D8886D55228191CE3912FB566DC3FC4426CBE875437908BD60455E9EFF6334AF6F199FAB332B78800960325F74EEA6E984AF9299A077A7786B72816C78F5E75E8674D4849D360561FC8A080B5194140BC38250BEDDCAD5A5347D1B3E8F7EC1224D8DD5D32A411377E1B7626A4FB20A2C3BECE55D8F822B833BCCEBF515B7414D2CDF62B000E9CCF44C1FC00B96EF2F2DC4CD571D4FBEB791B7D38F8AAA98D652E37922D9364D76BF39CFC689CC1C205E78ADC455AB6CFCCF7119D000462469370DB5AD81228B1590DF4496016DDDF0EE417C74A904C8AC2DDD92D60528BD1B5C213103C79E1D6BE56C323FC497A805ED8677C9BC90181B9048E2676387AE5238760A9C950D6C6A11DD87B0DC732E1B6885E67A73A4E56DD126BDA20FA3F3E3D03377060E5244355922FD6019D6B7986D5CCBAE2ECAEAD0E8ABF96F547C26E8EA2545B8B2E2B9D160BDDD1826F475F8762E581565F509BC16D1D98C80602FE584E4C1BA4CDD8CCBDDBA81DA82316C9E4EF185D6EFB837DEC43E1772D84BA4C5E162D5059BE4B0767981D7B76F6C9FCEEFEEF43E420630FBF297054CDE48F0350CA9E3CB7741534CD3BD3BC220BA5C85B7EE2A1BCC71F02A83225B1468DF77F7F91F85F86A77307F6B069C4C2215F008964A22E19B38D6652E2EECFAB164A9606CE58BD1D90050613D7838336A2283F61AFAB5CA6F5DD25524E3950E66C308A1AFE06D455A507EDC0944DF946D569CF23DF42EB7D6D622CF5220510083AF3CC5AB1E386CE114A577E48C5E328BF131672BF6D13CD4B89AEFD4E3EAF462D1C06ABAB8B45564F103C8B6CCD088994B4FF240D3CE10AAC295D353F42E0F4B045EBED695E10767B15830F71BCFB26527830F52322D1B3AAF37779B2CFDA1B1DD002F568C8901EC08C432F7089AD6F48ECDD71475E789003B45E1B42BD3D65D956A57104EAF9AD602C1416AC52BC8152FD2F109BD66A3E745F9DFEE26F46484134E959ABD78FB60D32638E9A52F8B0AD52241D38C5AB19B332672D8395A36E2B25F11F98B466214AF284A958C243B134CE90CC122AAD5F64AF9AF05C9624044B03E032561C7847800355ABD323CE63C2B0435CCA43854A30E273451CAE82D753BC0CC78344B36040A512EF5D5928B91FBFDD4BD58E4F7CEB34D8F198C507EBD94611192C0675DF40CEB683295C69EC537EB31F80B151E2D65A96AC25D110C6FF0BD92E99CA3174D5EE54D86DF3CF98B98B29EE9837344FACDA6227F809E6B70035699AB0D122EE7B84681B97899B654D85E65DFB207E816E4BE94527EC73007E54E04A3F3D6D84C737ED3A28E51E4867F219DEBE251F728DD4ED0C77F",
|
|
"A67BB0D879441C09933FDADE33695D4B18B75501AF9239ABA349430DB316BE67",
|
|
"C1F32099307F1A17F58BA32DAD0151736D831F7A3ADD0647F7D2320228D06AA7",
|
|
},
|
|
}
|
|
|
|
func TestEncapsulate1024ACVP(t *testing.T) {
|
|
for i, tc := range encap1024InternalProjectionCases {
|
|
ek, _ := hex.DecodeString(tc.ek)
|
|
dk, _ := hex.DecodeString(tc.dk)
|
|
c, _ := hex.DecodeString(tc.c)
|
|
k, _ := hex.DecodeString(tc.k)
|
|
m, _ := hex.DecodeString(tc.m)
|
|
|
|
ek1, err := NewEncapsulationKey1024(ek)
|
|
if err != nil {
|
|
t.Fatalf("case %d: NewEncapsulationKey1024: %v", i, err)
|
|
}
|
|
if !bytes.Equal(ek1.Bytes(), ek) {
|
|
t.Fatalf("case %d: encapsulation key mismatch", i)
|
|
}
|
|
k1, c1 := ek1.EncapsulateInternal((*[32]byte)(m))
|
|
if !bytes.Equal(c1, c) {
|
|
t.Fatalf("case %d: ciphertext mismatch", i)
|
|
}
|
|
if !bytes.Equal(k1, k) {
|
|
t.Fatalf("case %d: shared secret mismatch", i)
|
|
}
|
|
|
|
dk1, err := NewDecapsulationKey1024(dk)
|
|
if err != nil {
|
|
t.Fatalf("case %d: NewDecapsulationKey1024: %v", i, err)
|
|
}
|
|
if !bytes.Equal(dk1.Bytes(), dk) {
|
|
t.Fatalf("case %d: decapsulation key mismatch", i)
|
|
}
|
|
|
|
k2, err := dk1.Decapsulate(c)
|
|
if err != nil {
|
|
t.Fatalf("case %d: Decapsulate: %v", i, err)
|
|
}
|
|
if !bytes.Equal(k2, k) {
|
|
t.Fatalf("case %d: shared secret mismatch", i)
|
|
}
|
|
}
|
|
}
|
|
|
|
// https://github.com/usnistgov/ACVP-Server/blob/master/gen-val/json-files/ML-KEM-encapDecap-FIPS203/internalProjection.json
|
|
var decap1024InternalProjectionCases = []struct {
|
|
tcId int
|
|
ek string
|
|
dk string
|
|
c string
|
|
k string
|
|
success bool
|
|
}{
|
|
{
|
|
96,
|
|
"9D44513CA81A19B9619485AF92642AC01785C277AD4DB73FE96921BF98AE77A43CBB8B576439CF73317795C7130E76851B0670C12B2BA2555CF8F0C541010C438507913609579368BD922E506869627316D3655F20A62B4C8A7BA33A21DF71A964A9225BB81FA84ABFF9B81FB26A64BD65C4EEA5C955B33D2077A3EC9BC99B6A6F9339BB0926856111910701CCC6EB7502193397AA5C3E773FC453991B444001F474CB18AC7957696A643911555DFACBB03CF9050FE86F7E30181065AA486021D4C36B4C12CF34241852FC6CD322531107B038E46760C59E112149BE905C1915B22B396F814C83A3A1A17BA9B337B0C4D3213C79400037FA80BB3143914B56A8E45DE6348325004D5BDAA461DBA04FAC2E57890F1F256D9BE984E13B3200035552ACC6FB319E756948D7363510D9813561CEF17599BBE584CBA99E3D6564D53C30482A148346BBCD1BA4F56017AADC1A6DABC127F23CB595405B930D41185E56F51418A895294C21470097DB0B1E826619D65C0DFC2123428C88EEA040F4346A83F46173D45279F239D55600F1EB105A86A1FFB61738D6283A03B889E7238A31530FF869DE598235ACCB3E50B80FE59BDB2641F2855C38C643571A629C0B2B87CBABE6C6B0BDD7B2BF415A0B90266564B183E362CD8474EDF93C2D780F69973765554B6D50C7AAF23F4B79BFD8F8973B827C9A92625779BE873A92A9D9361EE20C31559DEC154E8BB5592B85C8A1F64CC13B7058486947C1929E3C6C7AA375E6720C41E03FA43045B549A05B97027178BF7CA62EAB0B123CB232A3E4CBA2F4BB66980977A78A7202A25527325C4B5682F79B3614680D9B9370C888301B133FC7BC74441A8FA44979C311C26182E01674CAA2372C681D53A019F7E1213115257E4C9FBC90478EC760786B6770693F5EE149AE60CC7835C0844177D8C04E54096A40491F8F6352A231C8E3348F4A02558503C18E2336C982226937AF63A15693025D85422D695737D649A04BAA617B6524FF8853FD664966302E29FAC6162848503908FC0BCEAB9710A806B81536CC78A332EEA70F04F27C6DF9645EB516B7D97B8F84C8E8C2C5ED87C0678795884A893866B853A9AC0B301C0320AE07C54C9D06709E66A90D69724F4192C6859DEA8054BA294FADCA6DB075233CF8AA159144A48C0D8CF4CD51A78A9D23A805E632BFAA587D66A7DE052829FB9FC23C6F66D6572020C60166A220C5432C24886F8553BB7214676AB135535D0CF711845C0F654774F591144D498CB93013E5676146361071E047452CB31AC8CB1F19B35A009CD12C0B0A7A84B6D983C388890E64408FE68F950584A917695B3304B580B3EBE45DF29B2685B02695356CDCA01869F4BE00A9930D384C5A7C8EA17B7033382DC0DCC806DBAEE26222B94C0A775C0220BA3835659F002C09CA37A8B5870B7D2521271B643496394157C621D44276EA0CBDEB0A01C6094B0C6183C92A9638BF1694CEECF66A23CC7C6D0664D4D09B58F39E6CD1CE4D125B08C66FDF0514A3534F026CC4C2517F9C137288232B08BBAADC635EA6024A8C4667E8DBC0B56556DC565D5C08C6963A33959B67F5A32A851B621A8B31B8704C97D0499FFCB6DA2A54DAB35E2CA31C722856061B3DEEBC7D6E5BBB64A40FA5CA1AEBB928BC3437DFA449486225941948A7228D56D7A60AE535A30A7A04925733F29A3E242F99876E7981502FC00258E67A1367778539C1E8529FFB707E13C1446099C6E681380F9A2D2F90BCA121009B822C1854B185A51B0BF61BA0B56C6FA002A5B675DC0A0752451F5C92CCDE666569FBCC683379FE6A850440346A3112888548D47B0468D7481A840946E53C0293C7696BBE88A914506A49CAEB3E233BBF00CC94AC74B70BA2A57D4A032BE3C1724382FFAA002DD7C9F025189CC385C1A24C10AC716376C98B5356AE9AAF75FC931E342F5986A146E3855F6873CC8BA3CB86BAD732241C313AD17883E86C5E2F5486C092BCB4F718B83213C95272D134A2A745A4D6309C266431980C8A0F86CB0CF03247FCC25E2072D5574009D4B61DE9608B29B44488942CB27FF3749A9480408E62AA47A0425D74CDD276B26495B0956BC398AABCD1FA51D5C342C5C13677D46BBFA994FE633F2BEC53C0B6BC50090ECA590CE5F6B30A9436A741AD68C7A9966BC9E7E3D0A64ADBADDC6AB2F71F57AE0AB344F614619AA6DAAAC767",
|
|
"F1B84483E2A3740C62F7B50CE3588848FCC3DD4851D8866250DB6EB10352C7AB582F537F25C0205CE97AF7D5A0BEA7B2230C37D496A47BE92C3657C924497C3DF90BC3B547C3A129C16532F3584620D71F99253EB0275682B75007B5A1387268615708C210B9C8F370CE8304377A535B8CCC0E550DF7521F18536A0AB4AADA863DFC81BC1044B37135B42584A8F7121DDA4036EC869566D551E3EBCA35902372580CE55A3B58934D8E445980453FCD1B9A1C85B73748A98FA837CF677C23268AB2EA42BB642198CC4631753104E9121E3832D34C7CEAB049F7D22F425C093FB6AA070ABB49781EBE1BBD55F663957341E432818169CFA8515C9F044766C397C191C129355B244730339B8E6404CC63B71A1E93349DDB5C2F995F61EB2508B96D51522A3532C14DCB095AA92F2E16404F1B2328006AE9EC5FB9627975B2C764432382A22076F701BD9A5E281909E3F8393DC3671CF26574B412A19B04D8372C5D1550961B38C6DA7B4B0538C978A4D3D8B61007193B1CC8D773777042A46BF496A1895584091B77A498D164BA4BD1C9B6D49A262AACA8CC03136389D480CA458348F9B2B67840180F014892477D1589C89D42B0097A72BFD9C215808B7317922AC360A8D5B1E3689535C45246948501DA8418D0464708CF8FE7A18566920E086EF879BFC154277E9BCE9B7906EFF0B3B7C33CCC09424C41A487B624A692805C5003B7E98058FB2C30D762981CC164D337C8B830552724AAE7B850625EF5556707520FEB633868270E0B40245FD07239B70C8FF00E9236409832551D252AFBB860739BB6F2427B42F0A08FC264EAD743F1E16E592BBB32B99308FC969980B8C4C685FCFC96E5B1BAB05A343075B327D658753B2065693FAC5258D6C149260183B7AA2F100B0564A6553836373A082D1E2843F140984B37ABC75A36A65B0162F958275ABA3A4119641709DEA1028FA620C322BEB210A68634CF93968C5B80C6AAB3A137A14440FB7E65C570CD366404853D9EDA9FD513A20332010298AC6AF9C85049B3AE4368450B02C598105EFA6B7A65820C659FE220B7B831A62DE7002719A7FCD18309AA154B2C3B28932B85822062B16189862F9E89CBF48C6FF612165F529424E34A72728DB92564F3A4135D3B35A4EB5D113890BAD49CFD4678600927C81586558818FD72CD048BB5A6682241081BE2B8B6E9077DF172363D32AA81CCCF5F4BCF2DF0324A2AAB062ABC2B2ACF591C59B56BBD10238D49202803D31A8C33B39DF9A2BD35CD6F8AB6CFAB65717B327148AAE2F598A6851FEE9A642115B7CA392DB1B273BA6A0D6EF2CFA010259B95957195BE2F93A3FAA68C703C7192AA6E7466BD766C620323662943038E349028208D1ACC70BC396D75D4526DC53CC50C4B546CA24969163E06B6246A542C1C776414058B458494F804510817F7DB8F55F9B32E85352FF6A8864359DD39621426711733A929391248D31A7110C80819795601CA211B87AE4323593A5987C89B24C55039DCA23B28A477416974699D27D6219F943937B9C44C472041BB9729624C0A2358CF908505F8C270F6CA12DCCB15A63E8BF88F4C431B5137BA0F6C90BF209832633B0CBA8BABC7617427479701287C35AFC06163B0429B155B91D414CA16D23FFCBB17FD1C3DCDA8262FC3798B1B1B0843CDAAB6C2609422419C54AD94783EEC42D06BB60F844B58F30427908156A660CC5AC63A5B0B2D8BC496BCC1AFB0CE4555C15956B134565F6C5B3386C57013074400E268CEC74A79C08112F734E316C969471389E94EBFDC14416C106CCCC8927B97DA76086B2C5FD76891A62C5521137DA3C30614361984058214B3507EE932682301F45CA20ED97BB607150AF70AD5DCAB4B5B0C3528969AC029C40CB484788A4568A654C32D4224A22E6A5D6F539F0B94AFDDA10BAC1563807686C48C07FDC622C9F153FAEBB85528C53C0ABA383BA51DB5925670BCCDB3C5B5D2C7750A2E9A83B51D1886C70534C8465E9086AB7851541AA4A6B0E96304CAB8B452C355F52034E2481F426F85B03899DA6B0546BA427AC751C84461952A9DC0A93A706B174733D7081CE724AE7CF04F08CA5B92A6CF0495A10DF2B682FB16806B9CDB6157D6FCA8C8A5A8E8970AA96434B27BBB77D41B1C4821EA6A8F870CBB7422499D44513CA81A19B9619485AF92642AC01785C277AD4DB73FE96921BF98AE77A43CBB8B576439CF73317795C7130E76851B0670C12B2BA2555CF8F0C541010C438507913609579368BD922E506869627316D3655F20A62B4C8A7BA33A21DF71A964A9225BB81FA84ABFF9B81FB26A64BD65C4EEA5C955B33D2077A3EC9BC99B6A6F9339BB0926856111910701CCC6EB7502193397AA5C3E773FC453991B444001F474CB18AC7957696A643911555DFACBB03CF9050FE86F7E30181065AA486021D4C36B4C12CF34241852FC6CD322531107B038E46760C59E112149BE905C1915B22B396F814C83A3A1A17BA9B337B0C4D3213C79400037FA80BB3143914B56A8E45DE6348325004D5BDAA461DBA04FAC2E57890F1F256D9BE984E13B3200035552ACC6FB319E756948D7363510D9813561CEF17599BBE584CBA99E3D6564D53C30482A148346BBCD1BA4F56017AADC1A6DABC127F23CB595405B930D41185E56F51418A895294C21470097DB0B1E826619D65C0DFC2123428C88EEA040F4346A83F46173D45279F239D55600F1EB105A86A1FFB61738D6283A03B889E7238A31530FF869DE598235ACCB3E50B80FE59BDB2641F2855C38C643571A629C0B2B87CBABE6C6B0BDD7B2BF415A0B90266564B183E362CD8474EDF93C2D780F69973765554B6D50C7AAF23F4B79BFD8F8973B827C9A92625779BE873A92A9D9361EE20C31559DEC154E8BB5592B85C8A1F64CC13B7058486947C1929E3C6C7AA375E6720C41E03FA43045B549A05B97027178BF7CA62EAB0B123CB232A3E4CBA2F4BB66980977A78A7202A25527325C4B5682F79B3614680D9B9370C888301B133FC7BC74441A8FA44979C311C26182E01674CAA2372C681D53A019F7E1213115257E4C9FBC90478EC760786B6770693F5EE149AE60CC7835C0844177D8C04E54096A40491F8F6352A231C8E3348F4A02558503C18E2336C982226937AF63A15693025D85422D695737D649A04BAA617B6524FF8853FD664966302E29FAC6162848503908FC0BCEAB9710A806B81536CC78A332EEA70F04F27C6DF9645EB516B7D97B8F84C8E8C2C5ED87C0678795884A893866B853A9AC0B301C0320AE07C54C9D06709E66A90D69724F4192C6859DEA8054BA294FADCA6DB075233CF8AA159144A48C0D8CF4CD51A78A9D23A805E632BFAA587D66A7DE052829FB9FC23C6F66D6572020C60166A220C5432C24886F8553BB7214676AB135535D0CF711845C0F654774F591144D498CB93013E5676146361071E047452CB31AC8CB1F19B35A009CD12C0B0A7A84B6D983C388890E64408FE68F950584A917695B3304B580B3EBE45DF29B2685B02695356CDCA01869F4BE00A9930D384C5A7C8EA17B7033382DC0DCC806DBAEE26222B94C0A775C0220BA3835659F002C09CA37A8B5870B7D2521271B643496394157C621D44276EA0CBDEB0A01C6094B0C6183C92A9638BF1694CEECF66A23CC7C6D0664D4D09B58F39E6CD1CE4D125B08C66FDF0514A3534F026CC4C2517F9C137288232B08BBAADC635EA6024A8C4667E8DBC0B56556DC565D5C08C6963A33959B67F5A32A851B621A8B31B8704C97D0499FFCB6DA2A54DAB35E2CA31C722856061B3DEEBC7D6E5BBB64A40FA5CA1AEBB928BC3437DFA449486225941948A7228D56D7A60AE535A30A7A04925733F29A3E242F99876E7981502FC00258E67A1367778539C1E8529FFB707E13C1446099C6E681380F9A2D2F90BCA121009B822C1854B185A51B0BF61BA0B56C6FA002A5B675DC0A0752451F5C92CCDE666569FBCC683379FE6A850440346A3112888548D47B0468D7481A840946E53C0293C7696BBE88A914506A49CAEB3E233BBF00CC94AC74B70BA2A57D4A032BE3C1724382FFAA002DD7C9F025189CC385C1A24C10AC716376C98B5356AE9AAF75FC931E342F5986A146E3855F6873CC8BA3CB86BAD732241C313AD17883E86C5E2F5486C092BCB4F718B83213C95272D134A2A745A4D6309C266431980C8A0F86CB0CF03247FCC25E2072D5574009D4B61DE9608B29B44488942CB27FF3749A9480408E62AA47A0425D74CDD276B26495B0956BC398AABCD1FA51D5C342C5C13677D46BBFA994FE633F2BEC53C0B6BC50090ECA590CE5F6B30A9436A741AD68C7A9966BC9E7E3D0A64ADBADDC6AB2F71F57AE0AB344F614619AA6DAAAC76772B1D32CDE082B6E240351358470809889513B4C05C4611B6C02F4E0B4AF9C2890699250EAEF4F0DD68C72720BEB1D19804203EBAE8B8903D98F25903A764877",
|
|
"BF5EF354B5EE7D74188232802D1B421F0C17012ECF2364E4CB996067AB6270BF034E5FB475BD2EB17C1708E4AD606FF23D38D27C1F4E524CC9767087F7F042F09B1C080B055F27CF879779D129823E4A491DE0F9AF496F04158DE90637547262D3086778AB268665CDEBFCEB85F3C5E02ED837AB43DDD97B456921AE2E03C88CCDAE7757A4773B1A207CC0B11B170F19FD70F25350849CB6C39AD12DC69352B4C4A6A9619CFD41EBCEC4E26B3B0685EDEC45D87879940C4C6E5C43FAD20C65FFF64F676847C4A63E7AE6144404332220CCF51B84C26E726DE976A2CC3AE143BC99B657B5F16290B37E43F8680B6BAED4F033FDF189376882DFF74864E55542CAEECB0B55B3FE2BE91EE73A20F74D5AB984F868CFBBA63EA7F6086B19D624278553378C58E3394FBD1FDB7EB86D919FD99D1B79B59BBB4E5AD0EDF7474DB392F2DAEDC3910D02E636775E313E7D14014027CFA561B66D0B249B6574A35CA45F2CF9AA63C2C71B970BAA3DBC0E0AF1C429FBD8D6E91D67CCA4EF9755522CD0FD49216F8D2BEFC9E37E7066315027BE0DC35460B4DBDC64C07EAA19C5A135FE9A0CEE287CCE67A66BC8E541936477A71157180EA185165E41230DDD35408448D9EE281287D6C03A9FFF128E7B3EF71512CDFF126109392FC44977BCEEDBB12C213E4A40F37AA7559A85945E4A14F6715CAE676F07B5237EE46968AD41A6B0AB4B2A0E558688326B558E6EA8FC925080DB42629CFA1F2BC13BE050476D9F0B2614E9EB0485CBE16C678ABAEC1ECBBC82B506A183EE8B66AE938A57A36EC1023D3981A38AB7E86FB267F722479751B0D01092C3D4F267419865225B1E0FCD50DB4E92172D5BA2DFA8D27F7E7F3971C116581FFDE1EB7C97AF66448ED55101A774393159BD058BE12640AC403AC8F62289938F332206AD1C82D8E0C969D7EBD0DDDE9B6A45E3B5B1CF2A6EBA80F91EF87E347B8EF4758EE8654566BA7DB32CAA8D79C914D291EBFAF7E9C6ABA393972F09A5C8821D435EECCEE94EFB9341561E367A15F5ECF2E4758A0D3558D122907FBF1BD0CC21419C9E6D1157F2A41E3CEB5C9C5089666A81D45D28CC30053CB05EF23235C78B121C5CCBE5E72056A792721FE1427A0CAE8891FC8AD94F80A4BCD1AA1287225532C6EAD21C8332AF19F1333095901F83EAEC30BEFB9CD35F2F056452F682211F4AA7E4FD886AB72A52DA710B4B19ADD0722B8CA090C349CC20C04020AD8284D24E67038AEA537E2F42009B24474EC61223D312AC332C189A696E8047EDD788EF78C3A999BD2724F56FA0BFF16A5F4899DC401C6C55573B954DE01F6C9928E2B1504DB33822623B2CCA44D2178AED441F1F420952FE61F1161EEE907F318E1C693BED9496DCAEE654151CA576EDBA2FBDC12714FC37AA2A3EE7BB167DE1ADE78F205C9E92B4E58A2D8A3D7C8788A167AB1B0EEE549C292BFB25B847B0BB7506A69C32DE245EF8D95E625E89A5C20A3D9823C0C021F1B703F2ABD31B0ABB5912802BE89E530A021A83F65EE94A17B091841661A3B63DD2812AA85A52E7A87B497FA61AE16BE69DD68EF016FB19904E8728B8647B4CA88ED38B90870A1BA32A2014C1887BF9390196B504F950C983546C4A692BF5022BF54664328B4C82D0085C8A399C96D13780F4FF9FC11EAC78F2C689CCFAF4483195ACEE717BDEA3EC75021E1691F53878EA9CCDF1D68134C4D8AEADB1D3DFD241424B2EF0636A35173DE770D0556FDBD7852B74A2D9F0D1D8DB59B4A634B1970E3A4037794A2151970B045AAA667F50549AAF71411792D613B1424AEB3748CCB1C844109D0FE6BC9E10E50FDBEA5FEA833BDAFE4E9D9910E366BA08792ACD7B2FB525C5987E16F1A7651B591C1503C7CE66D6D1A230B90C82CD7B503C55BA9D6951FB3C9C626521EBCDAA0584A05589889D018644E6ECCCEF120BED7079C2E1C66C0975B0BA01C29C0F7FDA9E3141449A1B6548A6B7A6FAD868C0A45E7766FC2D637A2A8A3AE68EC7FF3917C512B51EE5F9D54372B42440892F3DA9E4CD713AEA0311EEF7A5CFD8E441DAC5781827D9FC2C86E09D5C680C43B997CFB2D38D2A2019DBFBC144D2C442BDDC12DEE0C6DF9DC101E6BF0EADBAF2A89CCC0FCE10ECE108ABFC2BA288E64D130B2D72642F0456EA24C8B2BA88AD24E5D71778DDF85F8C125BF4710C0D333E4F7D547CFD4C6282BBF9A81BA8707804EA",
|
|
"74E9A374CFD12E92610591E05E80F256FA9BC85146F678C0FD538ACBBB765A6B",
|
|
true,
|
|
},
|
|
{
|
|
97,
|
|
"5CF432212464C32C44A8CA8FA6F6620899B08E968B2F047B42B00527901974337D3613C1BC278EE8D5C254B4898E1088D4A8C09EE175969407C01B11C5F8239C4A0455DA5DD6876C18160944054F69545A5340C5E2EC8A378B1824D313D4001F20FBA7B878AC5F490E0EB65C12D0ACFF68C9F9E54170F4137A4C206834BFEF81651C61BF3A6736B981A222994D3571B1B802B5D759847E915A9BB0B1CA894E055B1DB0FC5D7EE39C5695C10A3112D4E2A0364036C1824C7F32627E81176E659AA1B6CA4EA3CD6591CB7E86CDCB57A6440B6D92B08A628C378408ABF7B93CEC59AA19EB648B39170CA87AF41389ECACBA26919DBD3C4870360A72A398DC7CBDA62C26AE6A0419E5229DA7C77C725FFE9AAFA9EB0E5BEC8B1CCA02FE97379DB20143E21E1AA8BBB55B724BB668C10932BA9C58A24536CA9CAC675350C7F72157B0AF497BA4B16425F52069EEE144FA96A40DE99A1FE10D95F71102FAADF1A8A0FE8038B5A49C04C952C97C65685965E18A0BA8B805AE2839F61278B76265082329F6CA4040242A760B6CFD683D52D6BD4E1156BCD181D4C16FDF9C75426A8000B6952E2A023D3A59844B72F3D9BEEA35BE4F70988871C6079A2F49474599C9A0BBA36B8CC41865363B42554D9722B9CF7A5BCC1812889BCEDB1B4DED8B48BB42695D83BE31A543367819EC75851E1B920BA69AABF57007CAB1426C56EDB6B6F6832C95C0834581BF6240674D336D2437B820E84040BAA93D2056C1C3B2F9A0A6536C19F43A1D0904C188421805451BB91C908F159B1D308071D3886287C2CA56263C60A43F67916A3A79B2FA0B1BF897E941514E78968276508F3135D8A9B8E0D781FD41C05EDA9F2C4A9B4FD33B1C80BB690C59BCCC8CED95C1DCE72136125128507F30A465AE10AFE44CB764697B8DC1AD2CBA07C73BB888C9A559407A3D0636A4134A3E162853493C25770D10847A72956FE3CC01778049B46142AF4B4AD1D900B44A149323190500899D2801AA5C031A0C378F5CA3A778C8B7B688EEA26CD720CD8858A07DA46C176C08278B7C5D47AA6AA92753C75BDFF72E88708E6627BEC0335331D38604E84EC712B0D3EC8714E56FFA8807F40B8CE6C3723369883EDB462AD9BC972206A16C78DAF8C1428344E9C76B161A818BF8835A0043621B3841F80CA3F02970F7882B715EFF117B80E125ABFB406BD75027F9AD34EC7E7B629C2D834C90225020017CA511C8E83CAB0F98C739EB030E172A67586D90A5827E063B9C7B0705BB61F5A6067D102776F18950C3C2540198D916B7D64C803EEC3701799DA2C176AFF38C26004F3BC18144A3501D80B580C1442AFCAB6A458C1BB49E5A5728EB2818B6EC539F5C931F9743EB34B889401D19D220CF7822DB6906006B59A5CC90992691A2071631A96B6D8617F7E863C44A610E72A34CAB05D68281D07088D23580F0A87C870684D74C66D1827BA2702024098377AB359F10CF21B7C5EA9A77ECC121B9D81E52B4CFB315CE0076757EBA100F87A3CA1B28785C46B2B2856160213B09B3B0844055515085F721EE47356E31599D0071214C8B1EA44374890838D1C6636383CD9376D131CE1139277911B221A5CFA182ABE535AFF8995F573B55CA3C08CAFBBEEBB92EC280BC351735A5891997972104993F53321E70E571E86250CCF96010FB59FED89755317A0BAA5F5AD1A6CACAC5CA4612F2B27E94D6B61DCB138A661B28B03091C173BF96CFBBE00CC94223328B55F0B848E27497BAECC6A588C24EB34BFA771C94B4C3B6F87A54458941691C6945470AA68552B77DE5245CDEDC8A457805CEA024034C5731C296E0A468BCBA19D0DC7EC3A38615B10E1D7CB9B61315786A2AD737B384E511AB0CB300976324287063A76B589B88A686A276CA770AC9B79A0B0420692AF8D28AFE392135A62ED20C953DBA3EA0B1B740715DB8084B16661CF9F497BC8BC509E9A9BF5713769CC309090ABD3BCD49E69A09B6BD01536883B5ABF87622A93566B51B1E0C8A0A191A0F90EA5995852BF0EB8B3F15BBAAF55B82D900A74507D167CED79B5D51B5A7791055AE835D79C1B0FCCC0B213664BBF35D9B604356A23E89F9510AE2B8EF6BA3FA52387AC92019A773C4F26DB9F44801F00A2BDA3C14B2953486A7E5605E1B523F894510FA8BB85A080E589A4538F3E0C08FF714113962C5A6FC29172509B3C1AEC2FA41707439",
|
|
"630859B0E9292AF46619B7312DE45D6D4B01D4A4BF075372B8A345E1CCC66F3257FD3A5B47EA046A168211C807672C13BA4A48AE742DEFB760CC7446F086C0A8B439641A24EAC5CAF3A730CD3215BDE8B419CA04FAABC3FF0CCB8BDCC8AF1495886B6D33B01D25B032F7C3282AA9259E5178D5841106797A5D559882CAAA17EB695C397BBDD297A5E24A9E00532D355286C09197FC0D186666C5D5360E42B1DB865B1BA950B7D1C2CE46B64AC43D89404CCEB3CEE397175237B618D4112917535F250F2AF42E1A05282CB7CE65C73117F934E1B661CEE4763C375820F09F87916615865E30E146298B525B730B1D89AF469509A0F06FCBA5CED2405DC210AA39FC55251A80A8A0037389CA7DCA5D9A10B777B6919B6C1E805588E3F20849E7B2033C5B781B0545A84E842961041891F91A5E5D4C211B86B8ECF91DE0AB42919B1A5B2245EDD54689AA169E61152DC94FD9C1B80E1602F3E69F9BC38455C93FA2757E14A6369E942E8EC9173C9BC9168B83233902EDB01FAAA66CABB796793C53DCE32C1F81C329215EE9002D8D09494C8301218A379E1B3EA221BF2C36A927E4BDE0F27CC72735FC4B3E7C181F07270A8903460C88B5BE499B5763B79BCA1FC964B75ACA1F2649AB34771D90855C03AB8262F99B7859651FC49AC5119AA48A8931E19035C011A2FA7EC4464DC35B8D7D3392EE0B710A98B3E565CEA3925FFC9202DEC07042A12C677126ADEB25EC34BB0343A1DC311D55F464263C0E32287EBD5A6735682ACA478DCC34B5BF119D153A2C26BC4A47E743B5721A0A1B3DEC00196A006DAD826849C1146D01B891F690D7F116187A966A689E4475B6724445ED17CF1FF4026C8B587B600FCCF148D47852C546A70BE6767855603C77258CB4BCFA1CA310D533171287C5166230C759430B5B1027B8F7C1BFD8051DCF29B090423C93E3301E39ABE8F3C145735D5B9A83E5DACA1E013BDFC51ED05A66DFC8CD32798C928627C98393A1DA003C797BCAC402D3F1C6AD5B8F56626D7954A7C587AD7C7223D622A58169B826456088AB50D4A48EF959124271479E6AC7D979675E222ACCB2BFB8748AA9416B0C67288BA75963196819BA8B20B116F79955AED72735C08BE4297F28ACC8DF25215765C17F9A775310699993610A490F2368A87E9019CB60370E1749721B409B398363FA49F0246C08948674E3670F32525A43C337EB9677760264A05626021C2DE7C180935D3532285905AB71F3B94A259DCAF6CBD62BA5F7129AED0270EE86483673693EF90B84AB39A3CC10FD322D7A989E527920526A94DC8CA7AFE677376625B41AAC4BC4027A316323C877C5F5811888925B81A76EBA5D496923012B37FE6C2827872B81E65339AC8BFC57AE68A3C900C026DDA6AEDB09A3CB98CC2A809A7218B190A5749C42AE4F353124809D78733DC52A89850159AB73415988320C7A093C01D03F4492293856A531A4F013950E30C7A548BFE0466987C339DBF08E9A0B4EDECA083C399F2E6971CF3AC647FB5EEF401759E6C292F038DD732847545A63E43E17579C818C3DE888895F3AC712DC6C767158BE311F24E44FCF91ADB2663BBB0B1ACE801495CC5ABCC208F0DA634046503C694646E9368E43CD98A02DA67B1138EA5FB5BAB0DDC87F85E0A2F7B7308AC26B72427BF7F07DE8B5C304A60B23AA50C2E05E68A9206C3859CA017034814242F49C91A734353C0C17D075E31412245C131CE863E654927337AC046B1BA83214336C32CA8BB179F671E010922080BF1C2891967017459788E4B69131651BCE03911AF8AEDD6570ABEB17727BA25C719E69CB226076780BE183FE705E1539480C147773E3C313C359C3B13EEED49139B27AA78736F41283005CB40375C2DBF28D2DB5A767F0814D661B7E483048E465EE012E877760CAD3A25BA95356C087E596540A603DB8BBB45CF05D0D6431E4B5646D045972FA81524B9476F07F03BBAB400150E4A840853B768B0C02B1D75EB4748E3248BCB7CC037EA70F882299EDD18470443D9FB7A479D83A239809C166B6E7BB61ABD1BDBBA7AEC9B2BC55320F17FB72BD842D52DC8315A8738875ADBC254E5AF369FE32CF8AB5CC45459D2F7433D3777312F17171E3B073F01E0D175935E7B870676D73C1015DA7A64D6333E6601A94902B5CF432212464C32C44A8CA8FA6F6620899B08E968B2F047B42B00527901974337D3613C1BC278EE8D5C254B4898E1088D4A8C09EE175969407C01B11C5F8239C4A0455DA5DD6876C18160944054F69545A5340C5E2EC8A378B1824D313D4001F20FBA7B878AC5F490E0EB65C12D0ACFF68C9F9E54170F4137A4C206834BFEF81651C61BF3A6736B981A222994D3571B1B802B5D759847E915A9BB0B1CA894E055B1DB0FC5D7EE39C5695C10A3112D4E2A0364036C1824C7F32627E81176E659AA1B6CA4EA3CD6591CB7E86CDCB57A6440B6D92B08A628C378408ABF7B93CEC59AA19EB648B39170CA87AF41389ECACBA26919DBD3C4870360A72A398DC7CBDA62C26AE6A0419E5229DA7C77C725FFE9AAFA9EB0E5BEC8B1CCA02FE97379DB20143E21E1AA8BBB55B724BB668C10932BA9C58A24536CA9CAC675350C7F72157B0AF497BA4B16425F52069EEE144FA96A40DE99A1FE10D95F71102FAADF1A8A0FE8038B5A49C04C952C97C65685965E18A0BA8B805AE2839F61278B76265082329F6CA4040242A760B6CFD683D52D6BD4E1156BCD181D4C16FDF9C75426A8000B6952E2A023D3A59844B72F3D9BEEA35BE4F70988871C6079A2F49474599C9A0BBA36B8CC41865363B42554D9722B9CF7A5BCC1812889BCEDB1B4DED8B48BB42695D83BE31A543367819EC75851E1B920BA69AABF57007CAB1426C56EDB6B6F6832C95C0834581BF6240674D336D2437B820E84040BAA93D2056C1C3B2F9A0A6536C19F43A1D0904C188421805451BB91C908F159B1D308071D3886287C2CA56263C60A43F67916A3A79B2FA0B1BF897E941514E78968276508F3135D8A9B8E0D781FD41C05EDA9F2C4A9B4FD33B1C80BB690C59BCCC8CED95C1DCE72136125128507F30A465AE10AFE44CB764697B8DC1AD2CBA07C73BB888C9A559407A3D0636A4134A3E162853493C25770D10847A72956FE3CC01778049B46142AF4B4AD1D900B44A149323190500899D2801AA5C031A0C378F5CA3A778C8B7B688EEA26CD720CD8858A07DA46C176C08278B7C5D47AA6AA92753C75BDFF72E88708E6627BEC0335331D38604E84EC712B0D3EC8714E56FFA8807F40B8CE6C3723369883EDB462AD9BC972206A16C78DAF8C1428344E9C76B161A818BF8835A0043621B3841F80CA3F02970F7882B715EFF117B80E125ABFB406BD75027F9AD34EC7E7B629C2D834C90225020017CA511C8E83CAB0F98C739EB030E172A67586D90A5827E063B9C7B0705BB61F5A6067D102776F18950C3C2540198D916B7D64C803EEC3701799DA2C176AFF38C26004F3BC18144A3501D80B580C1442AFCAB6A458C1BB49E5A5728EB2818B6EC539F5C931F9743EB34B889401D19D220CF7822DB6906006B59A5CC90992691A2071631A96B6D8617F7E863C44A610E72A34CAB05D68281D07088D23580F0A87C870684D74C66D1827BA2702024098377AB359F10CF21B7C5EA9A77ECC121B9D81E52B4CFB315CE0076757EBA100F87A3CA1B28785C46B2B2856160213B09B3B0844055515085F721EE47356E31599D0071214C8B1EA44374890838D1C6636383CD9376D131CE1139277911B221A5CFA182ABE535AFF8995F573B55CA3C08CAFBBEEBB92EC280BC351735A5891997972104993F53321E70E571E86250CCF96010FB59FED89755317A0BAA5F5AD1A6CACAC5CA4612F2B27E94D6B61DCB138A661B28B03091C173BF96CFBBE00CC94223328B55F0B848E27497BAECC6A588C24EB34BFA771C94B4C3B6F87A54458941691C6945470AA68552B77DE5245CDEDC8A457805CEA024034C5731C296E0A468BCBA19D0DC7EC3A38615B10E1D7CB9B61315786A2AD737B384E511AB0CB300976324287063A76B589B88A686A276CA770AC9B79A0B0420692AF8D28AFE392135A62ED20C953DBA3EA0B1B740715DB8084B16661CF9F497BC8BC509E9A9BF5713769CC309090ABD3BCD49E69A09B6BD01536883B5ABF87622A93566B51B1E0C8A0A191A0F90EA5995852BF0EB8B3F15BBAAF55B82D900A74507D167CED79B5D51B5A7791055AE835D79C1B0FCCC0B213664BBF35D9B604356A23E89F9510AE2B8EF6BA3FA52387AC92019A773C4F26DB9F44801F00A2BDA3C14B2953486A7E5605E1B523F894510FA8BB85A080E589A4538F3E0C08FF714113962C5A6FC29172509B3C1AEC2FA41707439B37161E8A5BD109953D75BD81E062D36D81EC8718B0FF11F835FD02EBB0E37D1AF05419B0CB3DE1B514404D1C0DB9017182CE71D7A0E69CB141A94174CC758C0",
|
|
"13E45134547251CF55515976985578ABA6CA97FC3FF6DEED8E15AD947117FE7D2F2DACD7E681BB899F5F39AADCA87326085F01FBDE655E7C8A3711C9EA5F6604A547D3D019416E46EBBF851BE3C2703A3241188104EC340BB548E5E37B65F2272C104802AB743C88908D299EE6B9F1DE6F8E0038CC9C4AA567341A4984A8F101E2C2B2795D29557D84D61FE9A8CA937C2123F02BC595BEDA11431C1A2A7D45EC5730638BACCF5FE8397F8F3893C729208138912B846803DEA9D70425F52F07CA7B0BC60B09EA741BC737E60B7C27833BB1C7F2A8D650A7E5ABC1A963350CA34C852134A650254389F04EBED26D33F0BFD24877DAB9FA7173B12FDD6B52CCFD5AC840FE04E2381781A626C814B58EE149FEC67A5D978222AECF323E60AD10077FFDAA62960326191D9513F5E44B22D318D51DECDC1598CFEC5CCE77EF12114ED335837A9D999CA572A392B735A1E10808801687F66B8ED5E10D5E0E7561A1CB07E411CB1D2EAA5A55A9DDD146B661564CAE0BDC4FB175E508C43F6A41E2FB31A38F6A6750AB9B92C69B19CE9741733B77B49DCA86CA6A899D39087F285003358D5C8ADD8A8A5987B8B0AACA4661DAC7301383D80B1EBD29098BEB447E0159F06D72A414F0E28410696D71C7D717967196A22160D9B36615240D75998B0F1177332EA3EB3EB6F9B533B939494716A935DFDCC862EC0A25DA2908831A8DAF5030CFDD0262D0CB5DECDB4B468A3A75401D7878B9714F4C4D0C07538FE7DA6CA3FE9AC5FC829787CAFE2833740A6204B85E951E6AF2D5DF448F125004D85A212900DABE0361336F6284A8E3196B06AC45BFF78A10759D33307C4F6861641A8A515B2A56892B4640B0FD5622637ADD9AF0BB1C3F742A7803D2634236C69431C0A41D99E64A8B454652F3FA507CE74233CA4F49DEFFE91A16A08AAECEC3EA8DAEFE6F0981D2B4158AC43E6E10A8EDA0B112CDBF42EE0E5D552B7E523F006B04FABB3CC97D2FE955CA1A6445A017B6C434268D8E556DF27A6001B59B0ED67557B0673A3CB00959FC70ED07E9EB413BB62F05E7EE6D289215D267ED39ABD9D8D93B0AF375C308C3D08C1DA812502F79B36ACB07F0B97A6A0A127277B72C63394BF35054B9603CDEBA40D9809B8A51637D12B4CC826961B95394635843B4BC3E721670AC7E70FD6FDF9B7533E41A1674E2A189DF133441E7D09762E58B6492873CBCB3661C62C0ED26D1C4155C7DB5D24B08B85476CD9BD4139CFAE689DBF0B6DB7E1E0EA8FF81A8E506704DCF068EBF64F50A8C97D3C127CCA57EBEADAB37E2137E74C61927ECFD24897BCD207B475422AD6B68F9A6146FF320C7AA0B2BBB9C8129DB1DC03E094CEFE88E780DFBF4775E6464F77B5D2BEEE49DC074755110FEC2F43F728F866B0B51407B6AEED48DDEA08490CA786CFC1395105A13CF2A8D654AA7583786064C5AB4C3F432D1FB0E4F4F03F9E7580F839F42F1B72EFFA5DC5D0C90B2C21BD8B93AC7D1EF1603357DBF40DCA8AB551063E2F9C0600BF731BB54D21BBDF15A210EB7E5F2B8AB02468348ECAAD15992535B5EAB1E7C486B6E97968EAE3ECAD37CE9748573673381ED892627CE2F2BEC6D709390D6DA01394DF9B42AC9508C76BA57369FFF42DFFE028596651010D507AD065239E9E00E8C797ECB6ABA2B6DFE80B724B5F9826F0642E4BCA077A8A661CE86593CCF8C685FE690224E4A3F41D15115672FA485C362D641498D655A7CB1D696711DA7F77BA414D528B1BC861199BD0562832BB8032DB885786DE6C60170F33DAC20C2618945F4744F6C6FE1B10A2E24E0443BD60B1F40D39735625725FE20C18EA6C0192E9AF47ED1EE9D23DE3B83098FE40D36D2D17986FEC683FB5411CFEB8B1A5A61E990FCF6B3BC8E32E3B1F1A4BD2C3A86C089C38B3B1266A1CCEF53B663E0F1D28A2B63F11E1E2F86BF43E7542D1EBA891DD978C8F573289933A9B182FE4CD8CA072A59C4BA15D0ADAD86F7735307F24EE01D1789666A7123C25F46B38CDB72B43F86CD5A82B97EC8916ABDCB0CC03D1751106807FBEB21D1503C3D23EDAEB255F30F252A8AE83B5C02BD34DB15A34FDBAAC51D0E60B2A415E1BF0E07CD2453C9021BECFD13C73734F7F6BFBB4145B27F53847873A948977401EB8680ABAC4FDB1A5E8D1A94E6D1A8A50E4BF2CFDCF198D804B43B053276758C51E3B0A20FFFAE94B30705A66E5F586396",
|
|
"0178BDCD5B5412B1C06884AD4CA3EB43607566114B599A22323C508578F1CCCA",
|
|
false,
|
|
},
|
|
{
|
|
98,
|
|
"06725AC358433FC95A1269AA9247169504CFF462C01771B40583CFFC91162AF4062FF70B95E2C66EE373191051215B9A29222119385EDE2C514E018A52D847E0E616752A5717F9AF8FD6C5A4001FF21497EE765EC0D040A1D16CE9EC559DB5386C5C6B77B62A341B532FD13A7AD960D80B01FC2751B0398BE7147D688B7732107871E8C71EA1B8E0ACC8B93623B9E3848BF811FD25B1AB902048191BB516CCE4564CB1715C1D1BA7E3A6CA8153951C663B8772CA3058535958758461AF57805604E49114B2751EA13760E95985003AD06C86710B4E7A231D6713CACD75309077C4B92B288C109780F27663B8389594AA84C014D54AA1692C70BEA5C36685B6C66A7D11FB0B94DBABB71C1C80C95BC9277AD0871354123C0A231D255AAFE43B2E10B92FBB99390D00AE3FA68BD938954D78BEC3C08A31A1A47C03BE2C0747F4658FDE4299A58877271A0532C46DF2DBC18C655F23041BA820AA2BF37EEE304A72A587D15A1B26FABCE164B7700C09910902A87516A41054E24AA30623206FBBCDD57612B799B3DAD37D7DBB4A8C43CAD3B0C3842980C255C0C0582D685067BA837B9C2B0997A98B57B9AF212139DC4047A572484FC8106669036DB9951E460A42A581FCBB099F015705203C8E636965EA24BCE902706C3108D7B86A410A8D808544DB34E66A6417017CA41607CC938F4DF27E621C8716F834753B959FAC7D83C76CD80C167AACA2C00B794C416D4A008DECC84163522DDCC22FE5F519485AC5B2389149A694C86B08ABCB071BF50C9C93BBE7FC565D35919714336B413F08004BCCAA4E390C50559142FE35B65D56738B003E38E59712A193165C10F0B99C80C7BCDAB7102DF68085B546581852D42683D9D070AC72672CEA16CDE5C1239136D44CC1BDC92A91098CAC6C4B66B87546B71CA0B882A102CB50E0A0530C4732228508875DA38688585357ACFA74566C48641948200048B6FB59064B620A0754BC2901B4E89BD45C47E24BC9CDC7B81375324EA28429A3C2F273611A2BC2A60B773BC21AD2353F7DF804FFF062FC426E604A894532A051B13D97120DCBAA9F97588F2F96075614BFB6C78D43610A28044CB49969CE2A923D2B6845748EEB8B7E087CCC9AEB16A4F723A4C5924787AC7212C50B488CA99B99D5F90C2603073737A6A68B111D548C66EC62F79134D17C3D3F8BACB1AA22FB3C9515E423A350CC32ACA6C29CC621486CA1992D32735962C9819BF204594AC5AC92476C418E3121A187771020219551FA1BF8A9BF5373286999A7F701835C19CB4119A8B6AA7CC2323967E90721653AA9D8620378C1BC1AA205B13BD298AF5C406ECFA8061A9493FDEB69A3714196DB126277AA9BE11077E96CE196AB2C51202CC66C20F5C354A1C95B46726A6B2FE31702633200499C9AB779090B8A6E8D9B6B1A9452E94A698FB396D87978083C867D0B79B9016ACA4906EC109C1A291AAFCA8FA77C24E3A254083AA4CEA3A370A9B01D3A10D43B487E8496075840E9901E8A0845E9B550AAD7C2F7A35D56D19FB923B130574EA25B256370341D18872D158858148BC0EC3900DD3DFC1770D2D4A790307B2AD4C60B45919BAC9DCC913C66A277ADEC19197A5EB0FCA94076515A1993961322A8D82E86B286F4013F541B15AFE8BA9538B3F6F257990BB2C37901F4A961F53191B0BC4DA684C585338D2EB0B05A373BD2BB97F7B4061295C639DA13E830BAF22266C9326DEFB4BA732A392589593A31B5106C431CF5A985DC927E5567049082B62430541829C37C9A1ED968E42232EF50441B3480C3737CB0B57F2A7A5A48687F73D148FB89C7CDC95424CBB42A186FEFAA51C20C840493360EF05070454346784EEF826C34F15FCAF9B50FB47ED0467666A4BEFF465283454A24245ABF870BCAA89D70D51334A2942F774908DBC61693070D58A6997B6A1F6B2AD1D2931C27C74304321457BA3666153B169207B89786E40C2E050B560A37503141F67420A5B05C88B54F4BD2081920C314761FBB60C85D1443E93089DCA26007D3402FA918D522C85873C80F1A041AA63C0BC65C6F86178C61C5C732225980370BE51C7F065FB4C45E3C73BE30F4A3F31BA63039577E775CC0E2B62E8A1331818BB5943A637697ADB5751E16892DF3272A638051E009CFC0831632CC388D5C54CBA8FEB8607BEE47D52B8810EA13B378160BE4DB04A59B794CA91846",
|
|
"4659824AA22A4F3454BAD00ADB48C8CAB062A10470D83A74BD6A09441B5CB1D3AD148765ED18AA202CC5841901B929871E085F3F0B4FBCA649384176E962C9CF4022DA73A66D25ABC24CB5BB196099541F238518432955D2803E29279C7108CD2CB87832386368EC9A8F07CEFDF2B291A49B164055D78840EF6256E1E6A8E4ABB87D7137FA5A2A6082B5773C2C33241B00DBCC6C60561B3C66D3D5CA3FC66044A5AD63033011FA720425A874B805B0E9A8EFC6B0F701790975A7ADD8A3E78C7FFD872274E1CAAD0A087CDB742BD440931C5E43DC9B834A6EAC3C00E96415F0407C7E75CC9A074FE04517BA85AC694771D1457C87755DC6541E05E328F3E328EA87BDEA798506103A4F68C038827E1A357097B9330AF68D39C15FA6532943F6A8BA3ABB33738C31E0A96BE3BB353BC9C955A2E2B89692F4C4C1B520849CB762F8021A408FB6BBB9D1683D7657AFBAFB8D0E185B6BC03431C6C52BC69432FB347BECC48975A015A078CC691DED516BD5900226F2B7CDE6728608808FDC0D86F02011796E4A973A0B57A3CFF25A8EAC1CADBA93CA6397E00AA5C9E979DC90C3B7F729EF9C894A4739FF69BE65EB313DB1C1834C097F75B085C16C3AEC8FF946963312B82D6292CFD658D599410F871EDF522FCF952B6343A7EAB52C59C0B1E7822E6AF63994D3896774614E6091B6132D7F8A4F05619A4213037F6BBD5CD4466593A9BC7729929031B80A8906F031CB4C3498B93294F4B769C661D2B7330511CA43E8A87A817781729E45AC219D41306FE9B63E288D724B82B2A07ADB351108C15FF3FC67A9819403DA49F29659765B6D33D18D3F0A65CD5A4B2CB58736914DD7B74ABB85A852D1BF67A1B03DFC2B5A73710249526B5835EA7CC9F17059B761886D82B891B65844678148678876D8B9D765252E0A5E8CB18A4F9120F01954FE5208905AABC7D1163300B6B2F0BCBAD81C692808FD3793A2047C033066FB55AB924245193C68F01064EF610D7DA2CE64F474988B037FD79EAEE8554EEAA077209EC51849006886264574EAB71BCD93A2A735B44E4632C0D43F39142810D10CF58812436964D5BB4487157DE703A56186C3BDE12A5F074C6D947FEB740403C27D8BE7A2AF097F553947628851E909957E428AB6E43B5DE535F8817B234244C0930E700530BFB2827C4C1DD9570D8DD86A8CC2352F97A0E1AAC353E761CD7226D6F62EBFE95EAF280EA77A237E9063CA9718C5227A9A092587CCA109062679F84F890164BE7B1DF041969648272B21C76F78A02A7617F22CB389F9640FA75E0C957431696081E0AFF3E1B71A100FB68C0E4217A706BA06A1F52C1503AA8D06A28E67BEE5CA9F5DE5B1F4C2ABBB18BCF03694C5A70812F80982B28B7336B093C56E3C042E9551AE34980EF8C7489A541DD6F6BFBB0BA25485468AEA70AC373E3F80BA883A3346614E6BB00A64B7CF0D9BB7C1B8BD18B838757673CAC9663A88BCD3E4AEDD04945DA02AAC359E4129B42665A3C284AC94C75F97D932E442629995666D93B8C43ABA34AC420F8035D529C3FF5B04A3551EA9BB75184057F1D657A4A181655427543B7DC63546C8B0CF1FF9057336B86103239BA991102968EF841632306EFD994ADDF103D80A5FC34881AA54C217460B7A6BAA753820EE8B39C6553E88575152A103B26376C49A815FC17813EC0BC82A86668B965D641C92E02292E4065E2477D2927917A197063B9F27B0B996D90AE75314DBEAC9DBABA71A1713D616BDA831895D8A4BA187C0390A979C1A7ACAB23061B7A02192C2DB372062A42BD9BB10898571F183119D0C4E72227D2284B45390A516A23502374576C906D13509DC20AEBEE88EDE13603BB0404C52549667C0CA9BCA084837850BA4A2F93B183017E0192B76B14842644FC891279349224FC9C60F3C0595A93FD00276724493684A650FC00A9E029C2CB8900DCC363F495AF6D5A5E058CB522823D9113A68433919C5ABEE896DD0110957D7CB64858AA2C76E4CD47861C21EE65AAA38AC7B7BA262EAAB2A4311935AFA35DC31696D948964B596AE12356023835C4643F158127BD321E18B084558A607CAABA52A952EDB817C176BF1A4473E2558E23A5B7DB8781DE064D6E3BF65088BA8B20BDB0B629DCA6658309C4923398A8C82D73A9FDA7C6306725AC358433FC95A1269AA9247169504CFF462C01771B40583CFFC91162AF4062FF70B95E2C66EE373191051215B9A29222119385EDE2C514E018A52D847E0E616752A5717F9AF8FD6C5A4001FF21497EE765EC0D040A1D16CE9EC559DB5386C5C6B77B62A341B532FD13A7AD960D80B01FC2751B0398BE7147D688B7732107871E8C71EA1B8E0ACC8B93623B9E3848BF811FD25B1AB902048191BB516CCE4564CB1715C1D1BA7E3A6CA8153951C663B8772CA3058535958758461AF57805604E49114B2751EA13760E95985003AD06C86710B4E7A231D6713CACD75309077C4B92B288C109780F27663B8389594AA84C014D54AA1692C70BEA5C36685B6C66A7D11FB0B94DBABB71C1C80C95BC9277AD0871354123C0A231D255AAFE43B2E10B92FBB99390D00AE3FA68BD938954D78BEC3C08A31A1A47C03BE2C0747F4658FDE4299A58877271A0532C46DF2DBC18C655F23041BA820AA2BF37EEE304A72A587D15A1B26FABCE164B7700C09910902A87516A41054E24AA30623206FBBCDD57612B799B3DAD37D7DBB4A8C43CAD3B0C3842980C255C0C0582D685067BA837B9C2B0997A98B57B9AF212139DC4047A572484FC8106669036DB9951E460A42A581FCBB099F015705203C8E636965EA24BCE902706C3108D7B86A410A8D808544DB34E66A6417017CA41607CC938F4DF27E621C8716F834753B959FAC7D83C76CD80C167AACA2C00B794C416D4A008DECC84163522DDCC22FE5F519485AC5B2389149A694C86B08ABCB071BF50C9C93BBE7FC565D35919714336B413F08004BCCAA4E390C50559142FE35B65D56738B003E38E59712A193165C10F0B99C80C7BCDAB7102DF68085B546581852D42683D9D070AC72672CEA16CDE5C1239136D44CC1BDC92A91098CAC6C4B66B87546B71CA0B882A102CB50E0A0530C4732228508875DA38688585357ACFA74566C48641948200048B6FB59064B620A0754BC2901B4E89BD45C47E24BC9CDC7B81375324EA28429A3C2F273611A2BC2A60B773BC21AD2353F7DF804FFF062FC426E604A894532A051B13D97120DCBAA9F97588F2F96075614BFB6C78D43610A28044CB49969CE2A923D2B6845748EEB8B7E087CCC9AEB16A4F723A4C5924787AC7212C50B488CA99B99D5F90C2603073737A6A68B111D548C66EC62F79134D17C3D3F8BACB1AA22FB3C9515E423A350CC32ACA6C29CC621486CA1992D32735962C9819BF204594AC5AC92476C418E3121A187771020219551FA1BF8A9BF5373286999A7F701835C19CB4119A8B6AA7CC2323967E90721653AA9D8620378C1BC1AA205B13BD298AF5C406ECFA8061A9493FDEB69A3714196DB126277AA9BE11077E96CE196AB2C51202CC66C20F5C354A1C95B46726A6B2FE31702633200499C9AB779090B8A6E8D9B6B1A9452E94A698FB396D87978083C867D0B79B9016ACA4906EC109C1A291AAFCA8FA77C24E3A254083AA4CEA3A370A9B01D3A10D43B487E8496075840E9901E8A0845E9B550AAD7C2F7A35D56D19FB923B130574EA25B256370341D18872D158858148BC0EC3900DD3DFC1770D2D4A790307B2AD4C60B45919BAC9DCC913C66A277ADEC19197A5EB0FCA94076515A1993961322A8D82E86B286F4013F541B15AFE8BA9538B3F6F257990BB2C37901F4A961F53191B0BC4DA684C585338D2EB0B05A373BD2BB97F7B4061295C639DA13E830BAF22266C9326DEFB4BA732A392589593A31B5106C431CF5A985DC927E5567049082B62430541829C37C9A1ED968E42232EF50441B3480C3737CB0B57F2A7A5A48687F73D148FB89C7CDC95424CBB42A186FEFAA51C20C840493360EF05070454346784EEF826C34F15FCAF9B50FB47ED0467666A4BEFF465283454A24245ABF870BCAA89D70D51334A2942F774908DBC61693070D58A6997B6A1F6B2AD1D2931C27C74304321457BA3666153B169207B89786E40C2E050B560A37503141F67420A5B05C88B54F4BD2081920C314761FBB60C85D1443E93089DCA26007D3402FA918D522C85873C80F1A041AA63C0BC65C6F86178C61C5C732225980370BE51C7F065FB4C45E3C73BE30F4A3F31BA63039577E775CC0E2B62E8A1331818BB5943A637697ADB5751E16892DF3272A638051E009CFC0831632CC388D5C54CBA8FEB8607BEE47D52B8810EA13B378160BE4DB04A59B794CA918460F828896B3ABB156C26BC2E37F4C2DA1608C54971206892640A8B7FE278D8A82B65351EB0FD5E4BA7378EF3C5D2A5DD4084824D6C383D2377D36484624298A81",
|
|
"5CCE7410F68738ECED68AC00E2FF78963EE06325D7E030590584A30F9B740A2F7A5CEF919F384D1801827E677C2C155089EDDDFE74471E319B7A96C74A751368354A3C5C62D517CE7C20415E6E2A9121277E039432B99244D95283B9222AAE6F675B1FEA9E9AF71D60C82B8AB74628C2C0A626E8FB7FEEB3A60B97D85EA7BBE77B3FCC85FFDCA8C4501BF7B9AF179716EC483066FA92530B63BC0FA3C296997967FA1B3D98667A350447D59B8FAD4EBDC24F80C25A525022E1CF75F497BFD0889711ACAE5B5FBA78FF0A1CBBD47A352A8709085AE4ED8D06D05A9388FDB106DB6DCD93BF21407771A66B26C1FEA1ED2D15AE345F4D8131E7F2523AD95DA91D6A143AAA08ED15577DEF0F274AE853B41AB63650E7E733D9D7E9B3643FE4CDBE607E5A7DFE75AE57BE8C91932FD5D726691FBEE44D8F83DC94A78CA87369AB35371523462D3254724CE245FA33068606AEC2B7144706A18F34793AD298229E073511EFF4062182DAA6BCEE01CD388629ABA8EEEB105BF0DAA0120BA9FF27FF95EFE6FD4842342DE27AFEBF8972CF100FC3977B2F40E851B7DD14C02E9EE9EF0A7000882718EC2055C25BED85DDDDA8FA7379A904FEB36CA89E749A54F633042FD87DD70BB261058E64F82B5DCF19CA59233EEB364BBEAEA9B71B5E475C33D811D60E7608251F2B4DFD3AF9337FF03B9956BA7F53312E1955E9A1719C3CFAA7CCEDF8AE7CD90FF4F6129967295CAABEC97644108B3C5CFFE65E55ECB93394BA5F56E94FC2720A66023A4CEF20FBE9A3B7CC6684E7ADFAC2644E7E6A735A26D5BFACB56D03BB37474DBE73E11390DA4243162EBC5F93C9CE7CD5AAAB419239C89CA62B7AB233C7688803A32751234D7313DA0A888F41C9FA98C4486AB1D474EC933993BA7C882BF6A5B459B2F8CC606C9F6445FC8DC6CEB24BC376FA9BADF1F2449346E671A584BE000278A631B42DC80A6F723F64D273BC264527247F9B6220371C05FD3F729527FFD87A7C1528A0CC6BB2E5F5E75B009B9D8F92C29CAE035CFE1C16D7B66D32CE3BFC8447BB247F62E46B96A187CCE43256C5E1A0DE4B339854D281BD0AE36D248AC25DE1419BD2E3831BD9E1F5856CED3AB7B1BC9A48B33E24DB0814AB30DB03A25BA58B4A6CC39EA45556D02C6CDF9990938C002ED43EE740E8CE2F9C9C198D287E1225A495B5A054534705D6C47E00CC997539B63433A248D6331F70888CA4FBB01084DF34A8ED1934600FF0052C2C3E25103C6B588277E0073A6DDF31772DE96C54417A75D7E1DC92821B464C5418342D96E10551C81103978D7AE960933B054B7EDEEAD4601B670B86E080B6EE898E5D225897D683AB9006F1BD97A5B99CF95A9E8EE4C7CA4078D6D31F8A3C3EE51DCAE9E87CFEFB2FBAACC39DA57579699981F637B7755393093AE7C3292B748BC26DE7B6AA6E1E06A8BA4BE5AE0D7D8EE929F533EE1306A0C59EEC0EC5A54407118E2DB2DCC2927A176B425AFC0F6AF16DC9503DFB8F66D55990FB9116E7E5EDDE67BA3F9A42746A3103BCD0E3E688639AEA6E63965524997131F9F3BEB988B1AF9D79C5948FFF35EDBB579229659F009C8E29E9ACF753907F4126FD87C8FB1395CC1F0B796E7FE67959C034030333FE6A588FBBFA4536BCA76C69C1654F1BC08914A67BFBC229D8DC1E8FCFAD86F30312F544458818335E5D912E127524905C1590E198F3474529B28F2DEF383CA2A156D808A0766CF4BC99F1730BC846DEFB1C80523639C6CCC65C252491BC37242C0DE5F1F3B0CDAFAC8438195DD2F4AD66CF7EEB47C5D37043B40B5D102BE8CEF12710EE0A3FCD3A01E30A0FBC7837E97CAE4D6AB4A57F9F126C4DE3F8FD05DF3387F3AFBC4D33AA708AE4EF76266C76B6C9C3FD7FF9205146E56CFE1BA1275D57035CCB742B4B16E52F8983AC52A7EC8736ADE8CC998B82AEA49718A9399D2F7B388D16300956ED7A42854B712BE4857FD0FB85609930106BFFD6B91989AF5CBC8A3578DBCDB43A109E0D149F54E03F5B1FE3660ADDE9B58EC6133EC3724371D1B3D356FE0B7ED1FE1E7FDAB3D1DBA4CED7527D07296E59656A678091FE69E2F569AC15DB85B47A0D8CA9F81295C96F894128C52EB1F2BA3124D4D174D58D04680EE911EAA4029CC513F80523DCA639F6AB2649B5E93ABAB36DC1B8FABE40762F842606813836C3A5C011B37FB8B77EDBC1FFB118B3AB641C0616",
|
|
"AC32764AABF8926EC41754181B2CFF101B907C0D60FB92638214AB9164E24F2F",
|
|
false,
|
|
},
|
|
{
|
|
99,
|
|
"1023C20E2CC659E9B02355287DE1643CE2155E736FDB64213825B8C5A849E261C309B69558932170C5675A53CD4F62898593A8792535A0A06187EB688C1AC90B957719BB7B3933002A95324686741AF6998074AB9CA116ABD10D3CD482BCDA03710233FEE6296C718F3EB846E3B32FCEE59E2697ACA6C4905E86260038A0635504ABEAC8B656420DD22954A62AD05CA47BF685010CAF64A020B6782C77BC8DE7FC5BE33C119452AA518C4AE5183E6AE3AE195C07D3E4372E7B77B31A737EA6017EBAA1E9E1218970B1C26926A3F758D2301E2449B917D1192987613651B404D98E8A652ADA735E92D34192B6261A52C3A56672642757669A5716A277F7DCACC7D503007D805E950DF9765643349125310742042D4AEC4CB375C8F0C043C82A72CDC73FAE372DDB301F0C684A02C94D9C415E7830255C60CAC599392FC2A63294A2FB22B72009495E3717862AA7D37C5E8A0C0A89E990F16759C54AC9D7D6911EC0BBEF342C13CB988A12452355A8EB57734D1C5B42E485E5E70C98B792C0F0A4FB0B8DF0743CA6A94A936A80A40231FEB69F688B82692356135C45E2D6B3B346B05721BB570A9329428F86074B50930AA737BEDF2C0F3D4320BBCC4CFE2AA06E8820D38B09DC477C78385AF19595F34A807E3BC558228A06E629F479603CA8B8BE49CE24A48D68DCB2D183C83116BEAE4ACCA444A60A844749C6A76BBA67B8B60E04AA4852C56A462550A74B7A4A00CB5662B735BAB6F27157D8C1801A3963F8A1CCA0269D61D273E2B6B1527A1A0B683845E68D1E50C573C3841631300FA39336F3C9AF58A2ABBAAC45274DB4CB139FA7952D7323B658496C7584B291B58A17437EA217FD1A3720CAB173515548D045F7212A93A5033F525C6AB13FEC801ABC4B22177CC409EA1A37B10B48F29A9D631962552F35D291431C6E947B664B164317F010206BBB5023542B6A9CA1E1B877F0269A77C93B7C6E7C65755847328CE2809B74A0FFC76990055D02552919144758673D6F5090DD69ADF3A283B2E0CFDDE3460C8796E7EC4F4ACCB3A9E8872EC744D705C47D3511DDA09A7E8B3867C4385FCCCBD04855DE3619D1E20E3875861A88A40F672D12179BADF5C81FDC7A18E7A5F158866A932401D057CFA363087506C6E64DE22B1DFBE3C4E0634A3CD868389A262F1261FEF19E7B818F53D703AE9B537973849D26B97A8AB1E3B2252C0143E5B3388C577B718561F9A8C19D090D17E943A8D1503B26CB67E8A7FF6C7046F5AAA1CC33EAF011C4550ACEB88C5DD2CEBE12CC0D535E14330D2445A951FB528B108CCB7922562734C59CCB4D3552C354192E8A033DB7AA0FB89AE216689054AE0DA4A8C57A0311064E7C66C15DF19836F80B4FA23825235B6043C6B8B7937D295203B9002F697BBE8859481BCFF00C5E169030D9853EB4B2B924E657A1B424F34C36D0E29A62797A4A43282D69C30C512E6B53C4E39C55C5FB3C19106F14B06E96271CB4A6CE070964368432C721BBFBEC8375434539696322670709A832DA9CA666488C06746987B78D9F348C4B4576FC90986453BA25C7931D61BAE6A31ED5D2845E86366B0C1051233CB259720F615C22E0B62DE3C06264418E1A7DCEB10803224B0D963B3062B86453457BA804BE059499AB849DEC619C101BDEFB5CACACA5B85AB045CB21CA3528090C945D432A581CB6644B7F36D88E1E0290DFD83474B6614DB5377829A21640588FAA7F0E703D0B5651178A215753141913A62E59A61AC8522CB38A705824F2918BE534529098BBBA0760DD7689AB981AC342AB0278B109838FD798C12F71C6E5B419C261CB1AC99B173AA53C5613ACC6BC41A3CBE46CCF4EF3B7F4F49940648AD6AC21F16910FD91084B2B6590B21267002492CAB7E129C64430BD4CA911A5633364E30473B3BD86945134A93A8362C206D19AB62CC96EEB4012A8C218900576A5AC77B288124A9EFD8AB362844F7D873E21B84629B01797676D25533D0C21B4400242CF06CA4A9339E8C373E28CB2CE75B12D54CF70789F5C561A5231052149607E2C17E5D0A019B95B8AA161F39A6C93E7CAA803AA437A5F34E9962D520F49B72EF34C9D7C8015A154410C29381F417ADB2698F23734CB29570853B7A962225735A85D66C0171378E1F0A52E75251B512ED061082E959E04623B0F06A5705032C33129C953A6EC2A75CC21E114F6985BFF79837B",
|
|
"E3E45344B293B119586B15BBDCD8C1DE07392B64A444B7C6ADF10FF2089257471550166042016834CB592B8689B3F55E638798CA89CAE92AAB3989A24476142CD27CA4A747D134B7F8308A928890C52767D839535ED880B90C8C004C35FB5B261EB3A6B689786E044E3C470CD6A318D8AA9BC686814B655F430AAB78276BC1893ECFF095C95BA22E9B720418CDCB65A89B6C7170971C3A78CAC6B895D0BBBABC6925F0089656D6539DA9763A107C666AC7C4F01BFEE69B6B76CEF8009F8283852EDA1DFC6CBA2B053785D79E70680DAB36096B4A851EF48949297A419125C91290A105C28D8B4C33829B7075CD4FFA323E537268372E43345930D657EDBCA5760A7E67E442D284A20B1AC7003838241C26286C41EF628DEC929746A3496AF199612C42BDF17B74BCBEEF631E2E973E8A2CA3460C20220BBD7B726ACA0C89B8ABA792621FCE1C45A5C59C0D04988DE71D027209AA4C96245974E4182042E353897817C5C6309343C2E2208F6A2BC88583049E1A9596456FB81B7F67B83C8564CA78A3B0E0FA3F46517B8C63ACD3DB2F326CB8224C8740F2347CF828E1079B8041461BC209F90A7C6256CB00FA3803375EC56CA53CE81DEFD4322FC39A5740C894C31408B88DEEE21F32F42ECFC70E8C9CBB7473428FDA0AEE13A7B549861768CD1777AD08D22992FAA0CB5B9C1A16B60032028EC5055F296FD2A83D7A5583D0D5C2A8FB5BC6560F04673457214F49D715AE466F8D3C6094C676A8B38DF4F663637A472799AFFC236D3499726B6737DADAAD964351A1295193056626E182267A0FDDB85B2DA667CD4A159E592C6A83404273AFA25C398CE3BA70EC0A36249D1385052CE41625DACE34AA42B9538544B24242AA28F8D92FA0116E52F859BA4343FAB36CCCAA6FDEA1CC2928CE3C09CD121008E4B4A965C84C6073544F06D014642BB8D106D36726241197D7ABCC1D0B165FD566ED1C73AC57B10B79CCA6FB3A04691EF04465980B58BDF51E99F4BB836061A38715640C658AE55D9D08B071A566320A8E5D120BC433A873EC21DFF814D6A65D81B19BED6BBD5D52896FA4B4C532A6CE74793384A7344BCBB87720B385C87AE12E771C1152E495BFD9312872384472BF0EC39AE1E82BDA834802524630EC03810493D55C832217CF444B29FC9A5618646635EC767AF696F0F43A388CCE21B22BF13C9431406EB0C72CF7574188872A4CF553102B5353003D4CD256FFC8ABD3C59B743ABCAB18C0B31C41A277658F3478947AAB9027163F9B211C69C13E703E9F9A1CC6229501934B90B8745C8777CDD355E808CEDE632A1B009BE178454CB985597324149670FF2836A4085357776E418061488AB066868B6144CE41FCAC8F8B8C6C975078C19A9C0517047C0EB35772AE06A72A42BDF6435809823938A2C62ED00CFC78BA27F35C74F0A353D255508456D64008F62137A31B1F869C46BE6768FB47C37D542F77E28ECFC69265320679142FEDF0C870C1A8CCA981FCD3B61FA7289E9C16D8A416A86C951662AEDD096BC3475AD0C1AD82213082503D29D8AD8B71397955A3E2294B5205BB7D438F614A574C5086636049537C6CE0A24A242B54C723AD72F167C45923161193196BB0C55111F42A758A83253A396537946DB792C0D0C3647D418041A84F029107BA5171062349E0B45F9F34359E6C6E37750329B7B5069B375A147ADDACB1734C8CA0E0A6F7CB1675073209C9BCDDC8B4C8576E82E5A55B0115C18860A1939E76D8174D7960702AA381925ED9317BE85879CBA90832DA65E1D90AFEEAC77BAA46391225C910960D7262D842A4DC7A860B8C7F79E494D393C22A323A7B64604CF05C7D8907AF3B2159B70B20E83DC1D654A08641CE7566A0BA5BD9767A8583A0564808950526A9B4401667188A89604DD618EDF521DCF89063771EC3992C784C293232280CF8B68B5248066A476CA2482942BE48DC44BAF79A6DA37FE0E32744EB92B2E74B534B26D84A0E2B5073C09A0AA8810EC1204D9A02A6E4F35EB8809B67B6427D772143B91E1AEC72DB582CAC5715D0481698598E2740491451BE81EABD97F4CF838B4DC1268ACA4B8AB4CC67C8F09B8E0A0847922AD0280EF69226AEE95459010C512B6745E1C0F77A8BF315108530595503BC7A080D32A1596D7A51CE524C1023C20E2CC659E9B02355287DE1643CE2155E736FDB64213825B8C5A849E261C309B69558932170C5675A53CD4F62898593A8792535A0A06187EB688C1AC90B957719BB7B3933002A95324686741AF6998074AB9CA116ABD10D3CD482BCDA03710233FEE6296C718F3EB846E3B32FCEE59E2697ACA6C4905E86260038A0635504ABEAC8B656420DD22954A62AD05CA47BF685010CAF64A020B6782C77BC8DE7FC5BE33C119452AA518C4AE5183E6AE3AE195C07D3E4372E7B77B31A737EA6017EBAA1E9E1218970B1C26926A3F758D2301E2449B917D1192987613651B404D98E8A652ADA735E92D34192B6261A52C3A56672642757669A5716A277F7DCACC7D503007D805E950DF9765643349125310742042D4AEC4CB375C8F0C043C82A72CDC73FAE372DDB301F0C684A02C94D9C415E7830255C60CAC599392FC2A63294A2FB22B72009495E3717862AA7D37C5E8A0C0A89E990F16759C54AC9D7D6911EC0BBEF342C13CB988A12452355A8EB57734D1C5B42E485E5E70C98B792C0F0A4FB0B8DF0743CA6A94A936A80A40231FEB69F688B82692356135C45E2D6B3B346B05721BB570A9329428F86074B50930AA737BEDF2C0F3D4320BBCC4CFE2AA06E8820D38B09DC477C78385AF19595F34A807E3BC558228A06E629F479603CA8B8BE49CE24A48D68DCB2D183C83116BEAE4ACCA444A60A844749C6A76BBA67B8B60E04AA4852C56A462550A74B7A4A00CB5662B735BAB6F27157D8C1801A3963F8A1CCA0269D61D273E2B6B1527A1A0B683845E68D1E50C573C3841631300FA39336F3C9AF58A2ABBAAC45274DB4CB139FA7952D7323B658496C7584B291B58A17437EA217FD1A3720CAB173515548D045F7212A93A5033F525C6AB13FEC801ABC4B22177CC409EA1A37B10B48F29A9D631962552F35D291431C6E947B664B164317F010206BBB5023542B6A9CA1E1B877F0269A77C93B7C6E7C65755847328CE2809B74A0FFC76990055D02552919144758673D6F5090DD69ADF3A283B2E0CFDDE3460C8796E7EC4F4ACCB3A9E8872EC744D705C47D3511DDA09A7E8B3867C4385FCCCBD04855DE3619D1E20E3875861A88A40F672D12179BADF5C81FDC7A18E7A5F158866A932401D057CFA363087506C6E64DE22B1DFBE3C4E0634A3CD868389A262F1261FEF19E7B818F53D703AE9B537973849D26B97A8AB1E3B2252C0143E5B3388C577B718561F9A8C19D090D17E943A8D1503B26CB67E8A7FF6C7046F5AAA1CC33EAF011C4550ACEB88C5DD2CEBE12CC0D535E14330D2445A951FB528B108CCB7922562734C59CCB4D3552C354192E8A033DB7AA0FB89AE216689054AE0DA4A8C57A0311064E7C66C15DF19836F80B4FA23825235B6043C6B8B7937D295203B9002F697BBE8859481BCFF00C5E169030D9853EB4B2B924E657A1B424F34C36D0E29A62797A4A43282D69C30C512E6B53C4E39C55C5FB3C19106F14B06E96271CB4A6CE070964368432C721BBFBEC8375434539696322670709A832DA9CA666488C06746987B78D9F348C4B4576FC90986453BA25C7931D61BAE6A31ED5D2845E86366B0C1051233CB259720F615C22E0B62DE3C06264418E1A7DCEB10803224B0D963B3062B86453457BA804BE059499AB849DEC619C101BDEFB5CACACA5B85AB045CB21CA3528090C945D432A581CB6644B7F36D88E1E0290DFD83474B6614DB5377829A21640588FAA7F0E703D0B5651178A215753141913A62E59A61AC8522CB38A705824F2918BE534529098BBBA0760DD7689AB981AC342AB0278B109838FD798C12F71C6E5B419C261CB1AC99B173AA53C5613ACC6BC41A3CBE46CCF4EF3B7F4F49940648AD6AC21F16910FD91084B2B6590B21267002492CAB7E129C64430BD4CA911A5633364E30473B3BD86945134A93A8362C206D19AB62CC96EEB4012A8C218900576A5AC77B288124A9EFD8AB362844F7D873E21B84629B01797676D25533D0C21B4400242CF06CA4A9339E8C373E28CB2CE75B12D54CF70789F5C561A5231052149607E2C17E5D0A019B95B8AA161F39A6C93E7CAA803AA437A5F34E9962D520F49B72EF34C9D7C8015A154410C29381F417ADB2698F23734CB29570853B7A962225735A85D66C0171378E1F0A52E75251B512ED061082E959E04623B0F06A5705032C33129C953A6EC2A75CC21E114F6985BFF79837BB476B6EBC850461C28D4AE315666DDCDF4FE185EB612397E63569AFA884E6819429BB325104E4D5A8A83A27713B50E8BDC063091B606A298AD8F4DEE24EF2483",
|
|
"B352D5A6E2EADC640865E102615DB648C648EA3B1646DDCEA1611FE6F08C7EE36E6A84E3B389BBC59CD67559E3D304AF8DC139CFE8C262134BEF89A8B2DA20F1FAC6F1059D7F49C7D53AAFEB1EC9D507A1CD171D129FCC74E757995B38023245AE175AD9E0DCE6407567AE0734676567C62E019E94A033BF75593BF8A58B907750C561218C15FE345FE27D0439331988BD61C2755D5147D8ADBA19E11B25B3598F512D7525694150444B714D900F85965C870DA505E087ABB2FB6FBB1439A0E74664F8087D341C7ADAA5EA54AFF98D725B235640D89119A0CDE2D2DB1E08C9DACD6365DE79B754D88EE9F75BC4E3357507AA652C84D5EEE042BCE3B250AB16C1E9995D2FC65F097FDF3F019378AE0DCED07EAA0DEFFDBEF2CF7F66C3522ECB7BF4CCDA07C354931A6DCF7F759A41C5DDC17A5927C8DD452325DB023B632D1D5478623E641C9845725E4031D777BDB3E886EFD091D2A654959EA841A394B2620166B0E39D5D53BF98F37F6EC45FDC10236B8704771E518FD0C9581D81C0A7801DF129BF7D8EAD32F9BF8290F90D3CFE1CBC0CD9CD0AEED6F37DF04ADB354DD18CCBBEF4100FDDE5102BFD9965B3A373E9CE47CD4208A1C6CDE562D20DBFABC45B553DC0411E6EBE45219B16DD0BFDE0F5BA8239923FAB5CC5F796BD563B75BC10D45217C1BFD05BDE23CEDE44304F3B4644CE3BD6719C258387D2F684758C6E2D89BDFFC498EA518CE47A7E188E87F64CBBED10D27732E651557855827BF8F5014E5AF3E4FF06510DEC0F7F48BEC66C9731AD5CA8D11D5C1B6B3E6C4D1024B41EA4899919927F3FBD8A3F8E89CE54BA83C8DA840611CB16A439E004D486E08B8FEEC8B0BA65EAED6A1A08FBFC4C2D63BB6A7EA0EED678197736877599AA96E8F27BFDBB9A217E97B694DB2B604F4F2CBDCE7DBDF349960B8E9A036317F7339DED78ECE6CBEA9148636AEA5A2BA7F2B84CDE87BCB656A0E4B8B5351407F9094686909B2E7DF85E425352B7F95F7ABEE4243863F9C134E1836AA281D70755F66E6A4A3B6E8A2F7765D436129F719599A0C01E9C9798CC778FC771ACD5067E9E9E1EFBA1F04C367EFCA76E9C32E1145E49A6AD2D9E2B025FDC0EC71F510B2D61C83CB7D215CD306D9EBF2D6083F19EF8ABB7B3E46A728C5A25A5333E48EB2192CCB026BAF143D62478E23953C131DB0FCEDFFF17637D685ADFCF3B994ACC831607516DCA2695283DAD5E10D3B20F9F7366F0076F227EC2448D840F32CCA52D364A1912D569BE14E74A6DC4B4543FB3411BC0C1A3BABDA8FC6F0C4D20BB36C8B5A7FC8F4104A10779AC8375CB174E1366DB213917DC4340570192C57431067C0740A86BB342DFFA8E36BEC9BF554B36839B7D1F572C12928A197403B6B7814D8BD83EC23FF35E4475C8198D7C8EB6B9AFDD4A9DA583F5F92C5C4F048594ECDADD26057BA4C989E08C8E800A9E8A7DBFF4494A33FBA336BD60789D6CAA3277823462421CAF63C2937E16CDDCC5CC0668E49F75BFB96E0293482ABE5FD188DA961EB1116B3B2D2155725A8E52D25EFE3C2D6965A2EB62A20BC640B4E172ACF6DCB2E85EA99A3E0AD711F0FB45084F3DC3C433179C4C6BE311A1909DC097C911C666F78678FFF71D342D1661F07A14AFA2DD8A6D66AEE7A4C5C4CA2B8B77DE19B53E31DC61415937B676A13BD1EADF11A7F7302022EB41E147DE8FD1C2D71DB80778B1DB2D378B211EA04F35087FCE5A98F3D2F40DB13132C4E1B3B50241A70A44E5829DBB562E350FD01283CEB743FA0C5B72A8A5835B9FDE77AA23FF6F016EABF57A256C572AD3727455A10311FD7D1DA6483C70810AA47860436CC4216A90460B0BFA8B98D49FDB3433D0EEE65356D00A05F027C4A0C9409AF72D0E1C3E89E12A383E2AD5956C5A7DB0164613467EE7404BE8025D99CDCB59D9D701B119B16F3E462978850E8DBA8AB08B88E2BDA07DA68ABD89711A086B825298C8AAC9166D6936D3E4F1E09452853EFE6700D126D17BCF6F0D82434CD9F153FAD3573E20D35BCDBAF35D664309A2B9FA21996CAA29C9B11FAA3A22467DC1E5C9A986E225D199732B5B248A38587B2D0E441989170509E693C1966DA3DEAEE35C927DB6EFBBD4486C6EC570437E3879596A1F7A3EC3F4879782F2F21CDFBA0945F99BACBADD25BF1F25B6C5B6BF853901DAB0793419C543CF52525D759C1B0E899EBBD0E994C39EC7",
|
|
"90DEDD24590FEDFF42A27AB44173E0711839EC9D15728D7A0C191CE6CE5CBC68",
|
|
false,
|
|
},
|
|
}
|
|
|
|
func TestDecapsulate1024ACVP(t *testing.T) {
|
|
for i, tc := range decap1024InternalProjectionCases {
|
|
//ek, _ := hex.DecodeString(tc.ek)
|
|
dk, _ := hex.DecodeString(tc.dk)
|
|
c, _ := hex.DecodeString(tc.c)
|
|
k, _ := hex.DecodeString(tc.k)
|
|
|
|
dk1, err := NewDecapsulationKey1024(dk)
|
|
if err != nil {
|
|
t.Fatalf("case %d: NewDecapsulationKey1024: %v", i, err)
|
|
}
|
|
if !tc.success {
|
|
c[0] ^= 0xFF // Corrupt the ciphertext to force failure
|
|
}
|
|
k1, err := dk1.Decapsulate(c)
|
|
if tc.success {
|
|
if err != nil {
|
|
t.Fatalf("case %d: Decapsulate: %v", i, err)
|
|
}
|
|
if !bytes.Equal(k1, k) {
|
|
t.Fatalf("case %d: shared secret mismatch", i)
|
|
}
|
|
} else {
|
|
if bytes.Equal(k1, k) {
|
|
t.Fatalf("case %d: decapsulation should have failed", i)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkKeyGen1024(b *testing.B) {
|
|
var seed [64]byte
|
|
rand.Read(seed[:])
|
|
b.ResetTimer()
|
|
for b.Loop() {
|
|
if _, err := NewDecapsulationKeyFromSeed1024(seed[:]); err != nil {
|
|
b.Fatalf("NewDecapsulationKeyFromSeed1024 failed: %v", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkEncapsulateInternal1024(b *testing.B) {
|
|
tc := encap1024InternalProjectionCases[0]
|
|
ek, _ := hex.DecodeString(tc.ek)
|
|
m, _ := hex.DecodeString(tc.m)
|
|
ek1, err := NewEncapsulationKey1024(ek)
|
|
if err != nil {
|
|
b.Fatalf("NewEncapsulationKey1024: %v", err)
|
|
}
|
|
|
|
b.ResetTimer()
|
|
for b.Loop() {
|
|
ek1.EncapsulateInternal((*[32]byte)(m))
|
|
}
|
|
}
|
|
|
|
func BenchmarkDecapsulate1024(b *testing.B) {
|
|
tc := decap1024InternalProjectionCases[0]
|
|
dk, _ := hex.DecodeString(tc.dk)
|
|
c, _ := hex.DecodeString(tc.c)
|
|
|
|
dk1, err := NewDecapsulationKey1024(dk)
|
|
if err != nil {
|
|
b.Fatalf("NewDecapsulationKey1024: %v", err)
|
|
}
|
|
|
|
b.ResetTimer()
|
|
for b.Loop() {
|
|
if _, err := dk1.Decapsulate(c); err != nil {
|
|
b.Fatalf("Decapsulate: %v", err)
|
|
}
|
|
}
|
|
}
|