0x608060405234801562000010575f80fd5b506040518060400160405280600781526020017f426974636f696e000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f425443000000000000000000000000000000000000000000000000000000000081525081600390816200008e91906200065b565b508060049081620000a091906200065b565b5050505f60055f6101000a81548160ff021916908315150217905550620000dc620000d06200012260201b60201c565b6200012960201b60201c565b6200011c33620000f1620001ee60201b60201c565b600a620000ff9190620008c8565b6301406f4062000110919062000918565b620001f660201b60201c565b62000ab4565b5f33905090565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000267576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025e90620009c0565b60405180910390fd5b6200027a5f83836200035b60201b60201c565b8060025f8282546200028d9190620009e0565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200033c919062000a2b565b60405180910390a3620003575f83836200038360201b60201c565b5050565b6200036b6200038860201b60201c565b6200037e838383620003dd60201b60201c565b505050565b505050565b62000398620003e260201b60201c565b15620003db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d29062000a94565b60405180910390fd5b565b505050565b5f60055f9054906101000a900460ff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200047357607f821691505b6020821081036200048957620004886200042e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004b0565b620004f98683620004b0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620005436200053d620005378462000511565b6200051a565b62000511565b9050919050565b5f819050919050565b6200055e8362000523565b620005766200056d826200054a565b848454620004bc565b825550505050565b5f90565b6200058c6200057e565b6200059981848462000553565b505050565b5b81811015620005c057620005b45f8262000582565b6001810190506200059f565b5050565b601f8211156200060f57620005d9816200048f565b620005e484620004a1565b81016020851015620005f4578190505b6200060c6200060385620004a1565b8301826200059e565b50505b505050565b5f82821c905092915050565b5f620006315f198460080262000614565b1980831691505092915050565b5f6200064b838362000620565b9150826002028217905092915050565b6200066682620003f7565b67ffffffffffffffff81111562000682576200068162000401565b5b6200068e82546200045b565b6200069b828285620005c4565b5f60209050601f831160018114620006d1575f8415620006bc578287015190505b620006c885826200063e565b86555062000737565b601f198416620006e1866200048f565b5f5b828110156200070a57848901518255600182019150602085019450602081019050620006e3565b868310156200072a578489015162000726601f89168262000620565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620007c957808604811115620007a157620007a06200073f565b5b6001851615620007b15780820291505b8081029050620007c1856200076c565b945062000781565b94509492505050565b5f82620007e35760019050620008b5565b81620007f2575f9050620008b5565b81600181146200080b576002811462000816576200084c565b6001915050620008b5565b60ff8411156200082b576200082a6200073f565b5b8360020a9150848211156200084557620008446200073f565b5b50620008b5565b5060208310610133831016604e8410600b8410161715620008865782820a90508381111562000880576200087f6200073f565b5b620008b5565b62000895848484600162000778565b92509050818404811115620008af57620008ae6200073f565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620008d48262000511565b9150620008e183620008bc565b9250620009107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007d2565b905092915050565b5f620009248262000511565b9150620009318362000511565b9250828202620009418162000511565b915082820484148315176200095b576200095a6200073f565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620009a8601f8362000962565b9150620009b58262000972565b602082019050919050565b5f6020820190508181035f830152620009d9816200099a565b9050919050565b5f620009ec8262000511565b9150620009f98362000511565b925082820190508082111562000a145762000a136200073f565b5b92915050565b62000a258162000511565b82525050565b5f60208201905062000a405f83018462000a1a565b92915050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f62000a7c60108362000962565b915062000a898262000a46565b602082019050919050565b5f6020820190508181035f83015262000aad8162000a6e565b9050919050565b6118318062000ac25f395ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c806370a08231116100a057806395d89b411161006f57806395d89b4114610281578063a457c2d71461029f578063a9059cbb146102cf578063dd62ed3e146102ff578063f2fde38b1461032f57610109565b806370a082311461021f578063715018a61461024f5780638456cb59146102595780638da5cb5b1461026357610109565b8063313ce567116100dc578063313ce567146101a957806339509351146101c75780633f4ba83a146101f75780635c975abb1461020157610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b61011561034b565b6040516101229190610f5d565b60405180910390f35b6101456004803603810190610140919061100e565b6103db565b6040516101529190611066565b60405180910390f35b6101636103fd565b604051610170919061108e565b60405180910390f35b610193600480360381019061018e91906110a7565b610406565b6040516101a09190611066565b60405180910390f35b6101b1610434565b6040516101be9190611112565b60405180910390f35b6101e160048036038101906101dc919061100e565b61043c565b6040516101ee9190611066565b60405180910390f35b6101ff610472565b005b610209610484565b6040516102169190611066565b60405180910390f35b6102396004803603810190610234919061112b565b610499565b604051610246919061108e565b60405180910390f35b6102576104de565b005b6102616104f1565b005b61026b610503565b6040516102789190611165565b60405180910390f35b61028961052c565b6040516102969190610f5d565b60405180910390f35b6102b960048036038101906102b4919061100e565b6105bc565b6040516102c69190611066565b60405180910390f35b6102e960048036038101906102e4919061100e565b610631565b6040516102f69190611066565b60405180910390f35b6103196004803603810190610314919061117e565b610653565b604051610326919061108e565b60405180910390f35b6103496004803603810190610344919061112b565b6106d5565b005b60606003805461035a906111e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610386906111e9565b80156103d15780601f106103a8576101008083540402835291602001916103d1565b820191905f5260205f20905b8154815290600101906020018083116103b457829003601f168201915b5050505050905090565b5f806103e5610757565b90506103f281858561075e565b600191505092915050565b5f600254905090565b5f80610410610757565b905061041d858285610921565b6104288585856109ac565b60019150509392505050565b5f6012905090565b5f80610446610757565b90506104678185856104588589610653565b6104629190611246565b61075e565b600191505092915050565b61047a610c18565b610482610c96565b565b5f60055f9054906101000a900460ff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104e6610c18565b6104ef5f610cf7565b565b6104f9610c18565b610501610dbc565b565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461053b906111e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610567906111e9565b80156105b25780601f10610589576101008083540402835291602001916105b2565b820191905f5260205f20905b81548152906001019060200180831161059557829003601f168201915b5050505050905090565b5f806105c6610757565b90505f6105d38286610653565b905083811015610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060f906112e9565b60405180910390fd5b610625828686840361075e565b60019250505092915050565b5f8061063b610757565b90506106488185856109ac565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6106dd610c18565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361074b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074290611377565b60405180910390fd5b61075481610cf7565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390611405565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190611493565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610914919061108e565b60405180910390a3505050565b5f61092c8484610653565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109a65781811015610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f906114fb565b60405180910390fd5b6109a5848484840361075e565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1190611589565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90611617565b60405180910390fd5b610a93838383610e1e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d906116a5565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610bff919061108e565b60405180910390a3610c12848484610e36565b50505050565b610c20610757565b73ffffffffffffffffffffffffffffffffffffffff16610c3e610503565b73ffffffffffffffffffffffffffffffffffffffff1614610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b9061170d565b60405180910390fd5b565b610c9e610e3b565b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610ce0610757565b604051610ced9190611165565b60405180910390a1565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610dc4610e84565b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e07610757565b604051610e149190611165565b60405180910390a1565b610e26610e84565b610e31838383610ece565b505050565b505050565b610e43610484565b610e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7990611775565b60405180910390fd5b565b610e8c610484565b15610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec3906117dd565b60405180910390fd5b565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610f0a578082015181840152602081019050610eef565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610f2f82610ed3565b610f398185610edd565b9350610f49818560208601610eed565b610f5281610f15565b840191505092915050565b5f6020820190508181035f830152610f758184610f25565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610faa82610f81565b9050919050565b610fba81610fa0565b8114610fc4575f80fd5b50565b5f81359050610fd581610fb1565b92915050565b5f819050919050565b610fed81610fdb565b8114610ff7575f80fd5b50565b5f8135905061100881610fe4565b92915050565b5f806040838503121561102457611023610f7d565b5b5f61103185828601610fc7565b925050602061104285828601610ffa565b9150509250929050565b5f8115159050919050565b6110608161104c565b82525050565b5f6020820190506110795f830184611057565b92915050565b61108881610fdb565b82525050565b5f6020820190506110a15f83018461107f565b92915050565b5f805f606084860312156110be576110bd610f7d565b5b5f6110cb86828701610fc7565b93505060206110dc86828701610fc7565b92505060406110ed86828701610ffa565b9150509250925092565b5f60ff82169050919050565b61110c816110f7565b82525050565b5f6020820190506111255f830184611103565b92915050565b5f602082840312156111405761113f610f7d565b5b5f61114d84828501610fc7565b91505092915050565b61115f81610fa0565b82525050565b5f6020820190506111785f830184611156565b92915050565b5f806040838503121561119457611193610f7d565b5b5f6111a185828601610fc7565b92505060206111b285828601610fc7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061120057607f821691505b602082108103611213576112126111bc565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61125082610fdb565b915061125b83610fdb565b925082820190508082111561127357611272611219565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6112d3602583610edd565b91506112de82611279565b604082019050919050565b5f6020820190508181035f830152611300816112c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611361602683610edd565b915061136c82611307565b604082019050919050565b5f6020820190508181035f83015261138e81611355565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6113ef602483610edd565b91506113fa82611395565b604082019050919050565b5f6020820190508181035f83015261141c816113e3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61147d602283610edd565b915061148882611423565b604082019050919050565b5f6020820190508181035f8301526114aa81611471565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6114e5601d83610edd565b91506114f0826114b1565b602082019050919050565b5f6020820190508181035f830152611512816114d9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f611573602583610edd565b915061157e82611519565b604082019050919050565b5f6020820190508181035f8301526115a081611567565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611601602383610edd565b915061160c826115a7565b604082019050919050565b5f6020820190508181035f83015261162e816115f5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61168f602683610edd565b915061169a82611635565b604082019050919050565b5f6020820190508181035f8301526116bc81611683565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6116f7602083610edd565b9150611702826116c3565b602082019050919050565b5f6020820190508181035f830152611724816116eb565b9050919050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f61175f601483610edd565b915061176a8261172b565b602082019050919050565b5f6020820190508181035f83015261178c81611753565b9050919050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f6117c7601083610edd565b91506117d282611793565b602082019050919050565b5f6020820190508181035f8301526117f4816117bb565b905091905056fea2646970667358221220bf7884ecada988c51e9deea78ee03e9241563cd04b284dc96e008893032c083864736f6c63430008140033