60806040525f60055f6101000a81548160ff02191690831515021790555034801562000029575f80fd5b506040518060400160405280600781526020017f43726f636b6964000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43524b44000000000000000000000000000000000000000000000000000000008152508181620000b8620000ac6200012e60201b60201c565b6200013560201b60201c565b8160069081620000c9919062000613565b508060079081620000db919062000613565b505050505060016009819055506200012833620000fd620001f660201b60201c565b600a6200010b919062000880565b633b9aca006200011c9190620008d0565b620001fe60201b60201c565b620009fe565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200026f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002669062000978565b60405180910390fd5b620002825f8383620003a560201b60201c565b630f3eae65640997e6e50902673398bc1d25f112ed64085774394d0202805f52600160205260405f20720fffffffffffffffffffffffffffffffffffff815550508060045f828254620002d6919062000998565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003869190620009e3565b60405180910390a3620003a15f8383620003aa60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200042b57607f821691505b602082108103620004415762000440620003e6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000468565b620004b1868362000468565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004fb620004f5620004ef84620004c9565b620004d2565b620004c9565b9050919050565b5f819050919050565b6200051683620004db565b6200052e620005258262000502565b84845462000474565b825550505050565b5f90565b6200054462000536565b620005518184846200050b565b505050565b5b8181101562000578576200056c5f826200053a565b60018101905062000557565b5050565b601f821115620005c757620005918162000447565b6200059c8462000459565b81016020851015620005ac578190505b620005c4620005bb8562000459565b83018262000556565b50505b505050565b5f82821c905092915050565b5f620005e95f1984600802620005cc565b1980831691505092915050565b5f620006038383620005d8565b9150826002028217905092915050565b6200061e82620003af565b67ffffffffffffffff8111156200063a5762000639620003b9565b5b62000646825462000413565b620006538282856200057c565b5f60209050601f83116001811462000689575f841562000674578287015190505b620006808582620005f6565b865550620006ef565b601f198416620006998662000447565b5f5b82811015620006c2578489015182556001820191506020850194506020810190506200069b565b86831015620006e25784890151620006de601f891682620005d8565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200078157808604811115620007595762000758620006f7565b5b6001851615620007695780820291505b8081029050620007798562000724565b945062000739565b94509492505050565b5f826200079b57600190506200086d565b81620007aa575f90506200086d565b8160018114620007c35760028114620007ce5762000804565b60019150506200086d565b60ff841115620007e357620007e2620006f7565b5b8360020a915084821115620007fd57620007fc620006f7565b5b506200086d565b5060208310610133831016604e8410600b84101617156200083e5782820a905083811115620008385762000837620006f7565b5b6200086d565b6200084d848484600162000730565b92509050818404811115620008675762000866620006f7565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6200088c82620004c9565b9150620008998362000874565b9250620008c87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200078a565b905092915050565b5f620008dc82620004c9565b9150620008e983620004c9565b9250828202620008f981620004c9565b91508282048414831517620009135762000912620006f7565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000960601f836200091a565b91506200096d826200092a565b602082019050919050565b5f6020820190508181035f830152620009918162000952565b9050919050565b5f620009a482620004c9565b9150620009b183620004c9565b9250828201905080821115620009cc57620009cb620006f7565b5b92915050565b620009dd81620004c9565b82525050565b5f602082019050620009f85f830184620009d2565b92915050565b6121788062000a0c5f395ff3fe608060405234801561000f575f80fd5b5060043610610140575f3560e01c8063715018a6116100b657806395d89b411161007a57806395d89b411461035e578063a457c2d71461037c578063a9059cbb146103ac578063beabacc8146103dc578063dd62ed3e146103f8578063f2fde38b1461042857610140565b8063715018a6146102ce57806373ed6b13146102d857806384b2ef35146102f45780638da5cb5b146103105780638daad2571461032e57610140565b806338bf3cfa1161010857806338bf3cfa146101fe578063395093511461021a578063533516c11461024a578063618a2f5e1461026657806370a08231146102825780637111a994146102b257610140565b806306fdde0314610144578063095ea7b31461016257806318160ddd1461019257806323b872dd146101b0578063313ce567146101e0575b5f80fd5b61014c610444565b60405161015991906115be565b60405180910390f35b61017c60048036038101906101779190611673565b6104d4565b60405161018991906116cb565b60405180910390f35b61019a6104f6565b6040516101a791906116f3565b60405180910390f35b6101ca60048036038101906101c5919061170c565b6104ff565b6040516101d791906116cb565b60405180910390f35b6101e861052d565b6040516101f59190611777565b60405180910390f35b61021860048036038101906102139190611790565b610535565b005b610234600480360381019061022f9190611673565b610580565b60405161024191906116cb565b60405180910390f35b610264600480360381019061025f919061181c565b6105b6565b005b610280600480360381019061027b9190611867565b61065e565b005b61029c60048036038101906102979190611790565b6107c5565b6040516102a991906116f3565b60405180910390f35b6102cc60048036038101906102c79190611940565b61080b565b005b6102d6610900565b005b6102f260048036038101906102ed9190611867565b610913565b005b61030e6004803603810190610309919061181c565b610a7a565b005b610318610b23565b60405161032591906119ff565b60405180910390f35b61034860048036038101906103439190611790565b610b4a565b60405161035591906116cb565b60405180910390f35b610366610b9c565b60405161037391906115be565b60405180910390f35b61039660048036038101906103919190611673565b610c2c565b6040516103a391906116cb565b60405180910390f35b6103c660048036038101906103c19190611673565b610ca1565b6040516103d391906116cb565b60405180910390f35b6103f660048036038101906103f1919061170c565b610cc3565b005b610412600480360381019061040d9190611a18565b610d2d565b60405161041f91906116f3565b60405180910390f35b610442600480360381019061043d9190611790565b610daf565b005b60606006805461045390611a83565b80601f016020809104026020016040519081016040528092919081815260200182805461047f90611a83565b80156104ca5780601f106104a1576101008083540402835291602001916104ca565b820191905f5260205f20905b8154815290600101906020018083116104ad57829003601f168201915b5050505050905090565b5f806104de610e31565b90506104eb818585610e38565b600191505092915050565b5f600454905090565b5f80610509610e31565b9050610516858285610ffb565b610521858585611086565b60019150509392505050565b5f6012905090565b61053d6113eb565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8061058a610e31565b90506105ab81858561059c8589610d2d565b6105a69190611ae0565b610e38565b600191505092915050565b6105be6113eb565b5f5b82829050811015610659575f60025f8585858181106105e2576105e1611b13565b5b90506020020160208101906105f79190611790565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808061065190611b40565b9150506105c0565b505050565b5f5b848490508110156107bd5784848281811061067e5761067d611b13565b5b90506020020160208101906106939190611790565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822855f80876040516106f59493929190611bc9565b60405180910390a38484828181106107105761070f611b13565b5b90506020020160208101906107259190611790565b73ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107a291906116f3565b60405180910390a380806107b590611b40565b915050610660565b505050505050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f5b868690508110156108f75784848281811061082b5761082a611b13565b5b90506020020160208101906108409190611790565b73ffffffffffffffffffffffffffffffffffffffff1687878381811061086957610868611b13565b5b905060200201602081019061087e9190611790565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8585858181106108c8576108c7611b13565b5b905060200201356040516108dc91906116f3565b60405180910390a380806108ef90611b40565b91505061080d565b50505050505050565b6109086113eb565b6109115f611469565b565b5f5b84849050811015610a725784848281811061093357610932611b13565b5b90506020020160208101906109489190611790565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8225f86865f6040516109aa9493929190611c0c565b60405180910390a360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585838181106109fd576109fc611b13565b5b9050602002016020810190610a129190611790565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a5791906116f3565b60405180910390a38080610a6a90611b40565b915050610915565b505050505050565b610a826113eb565b5f5b82829050811015610b1e57600160025f858585818110610aa757610aa6611b13565b5b9050602002016020810190610abc9190611790565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610b1690611b40565b915050610a84565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b606060078054610bab90611a83565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd790611a83565b8015610c225780601f10610bf957610100808354040283529160200191610c22565b820191905f5260205f20905b815481529060010190602001808311610c0557829003601f168201915b5050505050905090565b5f80610c36610e31565b90505f610c438286610d2d565b905083811015610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f90611cbf565b60405180910390fd5b610c958286868403610e38565b60019250505092915050565b5f80610cab610e31565b9050610cb8818585611086565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d2091906116f3565b60405180910390a3505050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610db76113eb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90611d4d565b60405180910390fd5b610e2e81611469565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d90611ddb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0b90611e69565b60405180910390fd5b8060035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fee91906116f3565b60405180910390a3505050565b5f6110068484610d2d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110805781811015611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990611ed1565b60405180910390fd5b61107f8484848403610e38565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90611f5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115990611fed565b60405180910390fd5b61116d83838361152a565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e89061207b565b60405180910390fd5b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061128c575060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156112e7576001151560055f9054906101000a900460ff161515146112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd906120bc565b60405180910390fd5b5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113d291906116f3565b60405180910390a36113e584848461152f565b50505050565b6113f3610e31565b73ffffffffffffffffffffffffffffffffffffffff16611411610b23565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e90612124565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561156b578082015181840152602081019050611550565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61159082611534565b61159a818561153e565b93506115aa81856020860161154e565b6115b381611576565b840191505092915050565b5f6020820190508181035f8301526115d68184611586565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61160f826115e6565b9050919050565b61161f81611605565b8114611629575f80fd5b50565b5f8135905061163a81611616565b92915050565b5f819050919050565b61165281611640565b811461165c575f80fd5b50565b5f8135905061166d81611649565b92915050565b5f8060408385031215611689576116886115de565b5b5f6116968582860161162c565b92505060206116a78582860161165f565b9150509250929050565b5f8115159050919050565b6116c5816116b1565b82525050565b5f6020820190506116de5f8301846116bc565b92915050565b6116ed81611640565b82525050565b5f6020820190506117065f8301846116e4565b92915050565b5f805f60608486031215611723576117226115de565b5b5f6117308682870161162c565b93505060206117418682870161162c565b92505060406117528682870161165f565b9150509250925092565b5f60ff82169050919050565b6117718161175c565b82525050565b5f60208201905061178a5f830184611768565b92915050565b5f602082840312156117a5576117a46115de565b5b5f6117b28482850161162c565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126117dc576117db6117bb565b5b8235905067ffffffffffffffff8111156117f9576117f86117bf565b5b602083019150836020820283011115611815576118146117c3565b5b9250929050565b5f8060208385031215611832576118316115de565b5b5f83013567ffffffffffffffff81111561184f5761184e6115e2565b5b61185b858286016117c7565b92509250509250929050565b5f805f805f608086880312156118805761187f6115de565b5b5f61188d8882890161162c565b955050602086013567ffffffffffffffff8111156118ae576118ad6115e2565b5b6118ba888289016117c7565b945094505060406118cd8882890161165f565b92505060606118de8882890161165f565b9150509295509295909350565b5f8083601f840112611900576118ff6117bb565b5b8235905067ffffffffffffffff81111561191d5761191c6117bf565b5b602083019150836020820283011115611939576119386117c3565b5b9250929050565b5f805f805f806060878903121561195a576119596115de565b5b5f87013567ffffffffffffffff811115611977576119766115e2565b5b61198389828a016117c7565b9650965050602087013567ffffffffffffffff8111156119a6576119a56115e2565b5b6119b289828a016117c7565b9450945050604087013567ffffffffffffffff8111156119d5576119d46115e2565b5b6119e189828a016118eb565b92509250509295509295509295565b6119f981611605565b82525050565b5f602082019050611a125f8301846119f0565b92915050565b5f8060408385031215611a2e57611a2d6115de565b5b5f611a3b8582860161162c565b9250506020611a4c8582860161162c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611a9a57607f821691505b602082108103611aad57611aac611a56565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611aea82611640565b9150611af583611640565b9250828201905080821115611b0d57611b0c611ab3565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611b4a82611640565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b7c57611b7b611ab3565b5b600182019050919050565b5f819050919050565b5f819050919050565b5f611bb3611bae611ba984611b87565b611b90565b611640565b9050919050565b611bc381611b99565b82525050565b5f608082019050611bdc5f8301876116e4565b611be96020830186611bba565b611bf66040830185611bba565b611c0360608301846116e4565b95945050505050565b5f608082019050611c1f5f830187611bba565b611c2c60208301866116e4565b611c3960408301856116e4565b611c466060830184611bba565b95945050505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611ca960258361153e565b9150611cb482611c4f565b604082019050919050565b5f6020820190508181035f830152611cd681611c9d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611d3760268361153e565b9150611d4282611cdd565b604082019050919050565b5f6020820190508181035f830152611d6481611d2b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611dc560248361153e565b9150611dd082611d6b565b604082019050919050565b5f6020820190508181035f830152611df281611db9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611e5360228361153e565b9150611e5e82611df9565b604082019050919050565b5f6020820190508181035f830152611e8081611e47565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f611ebb601d8361153e565b9150611ec682611e87565b602082019050919050565b5f6020820190508181035f830152611ee881611eaf565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611f4960258361153e565b9150611f5482611eef565b604082019050919050565b5f6020820190508181035f830152611f7681611f3d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611fd760238361153e565b9150611fe282611f7d565b604082019050919050565b5f6020820190508181035f83015261200481611fcb565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61206560268361153e565b91506120708261200b565b604082019050919050565b5f6020820190508181035f83015261209281612059565b9050919050565b50565b5f6120a75f8361153e565b91506120b282612099565b5f82019050919050565b5f6020820190508181035f8301526120d38161209c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61210e60208361153e565b9150612119826120da565b602082019050919050565b5f6020820190508181035f83015261213b81612102565b905091905056fea26469706673582212204397a8593bc25beabfb8475b9aa9c2d12cabe8d67d31a3866cf1c9d06dcf614a64736f6c63430008140033