608060405234801561000f575f80fd5b506040518060400160405280600f81526020017f446f6767207769746820436869636b00000000000000000000000000000000008152506040518060400160405280600a81526020017f444f475749544348494b0000000000000000000000000000000000000000000081525060015f8190555081600490816100929190610753565b5080600590816100a29190610753565b5050505f6100b461025860201b60201c565b90508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35061018173d4077d48fa30fb725065fea87f86e61e54b52e8b6b033b2e3c9fd0803ce800000061025f60201b60201c565b600160075f73d4077d48fa30fb725065fea87f86e61e54b52e8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f7313b327b306cbdf78f12f6c91b5501cc4f95c6bd373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610a18565b5f33905090565b6b033b2e3c9fd0803ce80000008161027b6102da60201b60201c565b610285919061084f565b11156102c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bd90610902565b60405180910390fd5b6102d682826102e360201b60201c565b5050565b5f600354905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610351576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103489061096a565b60405180910390fd5b6103625f838361043660201b60201c565b8060035f828254610373919061084f565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546103c6919061084f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161042a9190610997565b60405180910390a35050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105145760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050a906109fa565b60405180910390fd5b5b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061059457607f821691505b6020821081036105a7576105a6610550565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826105ce565b61061386836105ce565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61065761065261064d8461062b565b610634565b61062b565b9050919050565b5f819050919050565b6106708361063d565b61068461067c8261065e565b8484546105da565b825550505050565b5f90565b61069861068c565b6106a3818484610667565b505050565b5b818110156106c6576106bb5f82610690565b6001810190506106a9565b5050565b601f82111561070b576106dc816105ad565b6106e5846105bf565b810160208510156106f4578190505b610708610700856105bf565b8301826106a8565b50505b505050565b5f82821c905092915050565b5f61072b5f1984600802610710565b1980831691505092915050565b5f610743838361071c565b9150826002028217905092915050565b61075c82610519565b67ffffffffffffffff81111561077557610774610523565b5b61077f825461057d565b61078a8282856106ca565b5f60209050601f8311600181146107bb575f84156107a9578287015190505b6107b38582610738565b86555061081a565b601f1984166107c9866105ad565b5f5b828110156107f0578489015182556001820191506020850194506020810190506107cb565b8683101561080d5784890151610809601f89168261071c565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6108598261062b565b91506108648361062b565b925082820190508082111561087c5761087b610822565b5b92915050565b5f82825260208201905092915050565b7f45524332304361707065643a20636f696e20616d6f756e7420657863656564655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f6108ec602183610882565b91506108f782610892565b604082019050919050565b5f6020820190508181035f830152610919816108e0565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610954601f83610882565b915061095f82610920565b602082019050919050565b5f6020820190508181035f83015261098181610948565b9050919050565b6109918161062b565b82525050565b5f6020820190506109aa5f830184610988565b92915050565b7f48656c6c6f2044616464792021000000000000000000000000000000000000005f82015250565b5f6109e4600d83610882565b91506109ef826109b0565b602082019050919050565b5f6020820190508181035f830152610a11816109d8565b9050919050565b61189980610a255f395ff3fe608060405234801561000f575f80fd5b50600436106100e8575f3560e01c806378051f4d1161008a578063a457c2d711610064578063a457c2d71461025e578063a9059cbb1461028e578063dd62ed3e146102be578063f7e58a63146102ee576100e8565b806378051f4d146102065780638da5cb5b1461022257806395d89b4114610240576100e8565b806323b872dd116100c657806323b872dd14610158578063313ce5671461018857806339509351146101a657806370a08231146101d6576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f80fd5b6100f461030a565b6040516101019190610f92565b60405180910390f35b610124600480360381019061011f9190611043565b61039a565b604051610131919061109b565b60405180910390f35b6101426103b7565b60405161014f91906110c3565b60405180910390f35b610172600480360381019061016d91906110dc565b6103c0565b60405161017f919061109b565b60405180910390f35b6101906104cb565b60405161019d9190611147565b60405180910390f35b6101c060048036038101906101bb9190611043565b6104d3565b6040516101cd919061109b565b60405180910390f35b6101f060048036038101906101eb9190611160565b61057a565b6040516101fd91906110c3565b60405180910390f35b610220600480360381019061021b9190611160565b6105c0565b005b61022a61067f565b604051610237919061119a565b60405180910390f35b6102486106a7565b6040516102559190610f92565b60405180910390f35b61027860048036038101906102739190611043565b610737565b604051610285919061109b565b60405180910390f35b6102a860048036038101906102a39190611043565b610826565b6040516102b5919061109b565b60405180910390f35b6102d860048036038101906102d391906111b3565b610853565b6040516102e591906110c3565b60405180910390f35b6103086004803603810190610303919061121b565b6108d5565b005b60606004805461031990611286565b80601f016020809104026020016040519081016040528092919081815260200182805461034590611286565b80156103905780601f1061036757610100808354040283529160200191610390565b820191905f5260205f20905b81548152906001019060200180831161037357829003601f168201915b5050505050905090565b5f6103ad6103a66109a9565b84846109b0565b6001905092915050565b5f600354905090565b5f6103c9610b73565b6103d4848484610bc0565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61041b6109a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561049a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049190611326565b60405180910390fd5b6104b7856104a66109a9565b85846104b29190611371565b6109b0565b60019150506104c4610e36565b9392505050565b5f6012905090565b5f6105706104df6109a9565b848460025f6104ec6109a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461056b91906113a4565b6109b0565b6001905092915050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6105c86109a9565b73ffffffffffffffffffffffffffffffffffffffff166105e661067f565b73ffffffffffffffffffffffffffffffffffffffff161461063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063390611421565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546106b690611286565b80601f01602080910402602001604051908101604052809291908181526020018280546106e290611286565b801561072d5780601f106107045761010080835404028352916020019161072d565b820191905f5260205f20905b81548152906001019060200180831161071057829003601f168201915b5050505050905090565b5f8060025f6107446109a9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156107fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f5906114af565b60405180910390fd5b61081b6108096109a9565b8585846108169190611371565b6109b0565b600191505092915050565b5f61082f610b73565b61084161083a6109a9565b8484610bc0565b6001905061084d610e36565b92915050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6108dd6109a9565b73ffffffffffffffffffffffffffffffffffffffff166108fb61067f565b73ffffffffffffffffffffffffffffffffffffffff1614610951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890611421565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a159061153d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a83906115cb565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b6691906110c3565b60405180910390a3505050565b60025f5403610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90611633565b60405180910390fd5b60025f81905550565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c25906116c1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c939061174f565b60405180910390fd5b610ca7838383610e3f565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d22906117dd565b60405180910390fd5b8181610d379190611371565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610dc491906113a4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e2891906110c3565b60405180910390a350505050565b60015f81905550565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f1d5760075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1390611845565b60405180910390fd5b5b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f6482610f22565b610f6e8185610f2c565b9350610f7e818560208601610f3c565b610f8781610f4a565b840191505092915050565b5f6020820190508181035f830152610faa8184610f5a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610fdf82610fb6565b9050919050565b610fef81610fd5565b8114610ff9575f80fd5b50565b5f8135905061100a81610fe6565b92915050565b5f819050919050565b61102281611010565b811461102c575f80fd5b50565b5f8135905061103d81611019565b92915050565b5f806040838503121561105957611058610fb2565b5b5f61106685828601610ffc565b92505060206110778582860161102f565b9150509250929050565b5f8115159050919050565b61109581611081565b82525050565b5f6020820190506110ae5f83018461108c565b92915050565b6110bd81611010565b82525050565b5f6020820190506110d65f8301846110b4565b92915050565b5f805f606084860312156110f3576110f2610fb2565b5b5f61110086828701610ffc565b935050602061111186828701610ffc565b92505060406111228682870161102f565b9150509250925092565b5f60ff82169050919050565b6111418161112c565b82525050565b5f60208201905061115a5f830184611138565b92915050565b5f6020828403121561117557611174610fb2565b5b5f61118284828501610ffc565b91505092915050565b61119481610fd5565b82525050565b5f6020820190506111ad5f83018461118b565b92915050565b5f80604083850312156111c9576111c8610fb2565b5b5f6111d685828601610ffc565b92505060206111e785828601610ffc565b9150509250929050565b6111fa81611081565b8114611204575f80fd5b50565b5f81359050611215816111f1565b92915050565b5f806040838503121561123157611230610fb2565b5b5f61123e85828601610ffc565b925050602061124f85828601611207565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061129d57607f821691505b6020821081036112b0576112af611259565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f611310602883610f2c565b915061131b826112b6565b604082019050919050565b5f6020820190508181035f83015261133d81611304565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61137b82611010565b915061138683611010565b925082820390508181111561139e5761139d611344565b5b92915050565b5f6113ae82611010565b91506113b983611010565b92508282019050808211156113d1576113d0611344565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61140b602083610f2c565b9150611416826113d7565b602082019050919050565b5f6020820190508181035f830152611438816113ff565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f611499602583610f2c565b91506114a48261143f565b604082019050919050565b5f6020820190508181035f8301526114c68161148d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f611527602483610f2c565b9150611532826114cd565b604082019050919050565b5f6020820190508181035f8301526115548161151b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6115b5602283610f2c565b91506115c08261155b565b604082019050919050565b5f6020820190508181035f8301526115e2816115a9565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f61161d601f83610f2c565b9150611628826115e9565b602082019050919050565b5f6020820190508181035f83015261164a81611611565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6116ab602583610f2c565b91506116b682611651565b604082019050919050565b5f6020820190508181035f8301526116d88161169f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611739602383610f2c565b9150611744826116df565b604082019050919050565b5f6020820190508181035f8301526117668161172d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6117c7602683610f2c565b91506117d28261176d565b604082019050919050565b5f6020820190508181035f8301526117f4816117bb565b9050919050565b7f48656c6c6f2044616464792021000000000000000000000000000000000000005f82015250565b5f61182f600d83610f2c565b915061183a826117fb565b602082019050919050565b5f6020820190508181035f83015261185c81611823565b905091905056fea264697066735822122088d375d335f5ce100fd2b8449965f2e0e4e849b710577775c99a249d8c2a3beb64736f6c634300081a0033